タグ

C++に関するyunottinoatamaのブックマーク (49)

  • スレッドセーフという幻想と現実 - yohhoyの日記(別館)

    この記事はC++ Advent Calendar 2013の15日目にエントリしています。 内容はC++標準ライブラリとスレッドセーフに関する解説になります。 flickr / rennasverden もくじ What's スレッドセーフ? スレッドセーフという幻想 基型とデータ競合 C++標準ライブラリとデータ競合 C++標準ライブラリ:シーケンスコンテナ編 C++標準ライブラリ:連想コンテナ編 スレッドセーフ RELOADED 基的なスレッドセーフ保証 std::shared_ptr<T> std::rand() std::cout (文のみ約9000字) はじめに マルチスレッド対応の点では他言語に遅れを取っていたプログラミング言語C++ですが、C++11ではようやく標準ライブラリにスレッドサポートが追加されました。C++11スレッドサポートではスレッドクラスstd::thr

    スレッドセーフという幻想と現実 - yohhoyの日記(別館)
  • C++例外処理プログラミング

    [ C++で開発 ] 例外処理プログラミング 戻り値によるエラー通知ではなく、より障害に対する耐性を高めるためのシステムとしてC++言語に導入されたのが例外機構です。この例外処理はC++に限らずオブジェクト指向言語の多くに導入されています。 throwとcatchの書き方 3つの方法:ポインタ渡しか値渡しか参照渡しか 関数宣言のthrow:例外仕様 単純なunexpected/terminateの実装 例外の考え方 例外を使用する/しない 例外処理をする/しない スタックフレームを保持する例外 Exceptionクラス TraceExceptionクラス Linuxのbacktraceシステムコール backtraceを用いた例外クラスの実装例 throwとcatchの書き方 3つの方法:ポインタ渡しか値渡しか参照渡しか (節の記述は、書籍「More Effective C++」の§13

  • C++のこれまでとこれから | Bjarne Stroustrup講演@東大「The continuing evolution of C++」参加報告

    当日の講演の様子はhttp://todai.tvで後日公開予定とのことだ。 2018-12-28に東大TVで講演動画 (The Continuing Evolution of C++ [EN] — 東大TV) が公開された。 経緯 6月半ばにこのツイートを誰かのリツイート経由で目撃したのがきっかけだった。 C++ の生みの親である Stroustrup 博士の講演会を7月27日 15:00 から東大で開催します。学外の方もどうぞ。 https://t.co/c39FBkpflJ — Shigeru Chiba (@chiba_sh) 2018年6月18日 Bjarne Stroustrupはプログラミング言語C++の生みの親だ。C++は,Webブラウザー (Chromium),データベース (MySQL),コンパイラー (GCC),ゲームエンジン (Unity, UnrealEngine)

    C++のこれまでとこれから | Bjarne Stroustrup講演@東大「The continuing evolution of C++」参加報告
  • Expression Template - Faith and Brave - C++で遊ぼう

    operator+ - * / のような演算子の一般的な実装では一時オブジェクトのコストが発生します。 Vector operator+(const Vector& l, const Vector& r) { const std::size_t n = l.size(); Vector tmp(l); for (std::size_t i = 0; i < n; ++i) tmp[i] += r[i]; return tmp; } そのため、以下のような式を書いた場合 Vector x, y, z, t; t = x + y + z; x + y + z では 2 つの一時オブジェクトが生成されてしまうのです。 以下のように書けば一時オブジェクトは生成されませんが const std::size_t n = x.size(); for (std::size_t i = 0; i < n;

    Expression Template - Faith and Brave - C++で遊ぼう
  • Makefileの書き方に関する備忘録 その4 - minus9d's diary

    他にもMakefileに関する記事を書いていますが、この記事だけで読んでも問題ありません。目次→Makefileの書き方に関する備忘録 - minus9d's diary 少し複雑な構成を持つC++のコード群からバイナリをビルドするための良いMakefileの例を makefile - How to place object files in separate subdirectory - Stack Overflow に見つけたので共有します。 目標 まず、以下のようなソースコードを持っているとします。srcはC++のソースコードを格納するディレクトリで、その下のディレクトリ構造は決まった形をもたないものとします。includeはヘッダファイルのみを格納するディレクトリです。 /your_project /src /subdir1/a.cpp, a.h b.cpp, b.h /subdi

    Makefileの書き方に関する備忘録 その4 - minus9d's diary
  • Makefileの書き方に関する備忘録 その3 - minus9d's diary

    この記事は続き記事です。目次→Makefileの書き方に関する備忘録 - minus9dの日記 変数に何を入れるか .cから.oへのコンパイルには以下の暗黙的なルールが使われる。 $(CC) $(CFLAGS) $(CPPFLAGS) $(TARGET_ARCH) -c -o $@.ccから.oへのコンパイルには以下の暗黙的なルールが使われる。 $(CXX) $(CXXFLAGS) $(CPPFLAGS) $(TARGET_ARCH) -c -o $@これらの変数には、以下のルールに従って値を入れるのがよさそう。 $(CC): Cのコンパイラを指定。cc, gcc, armcc(ARM用のコンパイラ)など $(CXX): C++のコンパイラを指定。g++など $(CPPFLAGS): C/C++共通で指定したいフラグを入れる。-I/usr/include, -O2など $(CFLAGS):

    Makefileの書き方に関する備忘録 その3 - minus9d's diary
  • letsboost::property_tree

    abstract 必要なヘッダ <boost/property_tree/ptree.hpp> (メイン) <boost/property_tree/xml_parser.hpp> (XML読み書き) <boost/property_tree/json_parser.hpp> (JSON読み書き) <boost/property_tree/ini_parser.hpp> (INI読み書き) <boost/property_tree/info_parser.hpp> (INFO読み書き) ... 出来ること 汎用木構造型コンフィグ管理 リファレンス en sample サンプルの動作確認バージョン [GCC4.4/1.42.0] [VC9/1.42.0] #include <iostream> #include <string> #include <boost/foreach.hpp> #i

  • introdunction to SIMD programming - primitive: blog

    Unite 2015 Tokyo の講演で詳細を話せなかったのが心残りだったので、大量のオブジェクトの更新処理についてこの場で書いてみます。 主に C++ で、簡単なパーティクルエンジンを作り、それを SIMD を用いて高速化する手順を解説します。 話を簡単にするため、以下の前提を設けます。 ・x86 環境のみ考慮 ・パーティクルは位置と速度のみを保持 ・パーティクル同士の相互衝突は総当たりで計算 総当たりなので超遅いですが、実装は容易で SIMD による恩恵を受けやすく、題材として手頃です。 この記事の中で引用されているソースの元は こちら、ビルド結果 (上のスクリーンショットのデモプログラム) は こちら になります。 相互衝突するパーティクルを実装する場合、お互いの距離を計算し、当たっていたらめり込み具合に応じて押し返す、というのがよくある実装だと思います。まずはそれをストレートに

    introdunction to SIMD programming - primitive: blog
  • C++/Boost 基礎文法最速マスター - 野良C++erの雑記帳

    参考: http://d.hatena.ne.jp/faith_and_brave/20100201/1264997004 「C++0xになると、C++03 でごちゃごちゃした部分がだいぶすっきり書けるようになる」 らしいですが、C++0xを待たなくてもBoostを使えばだいぶすっきり書けるので、 BoostでのC++入門はこんな感じだよー、という気持ちで以下略。 この記事はC言語をある程度理解していることが前提です。 1. Hello World C++/Boostでの出力はC++標準の IOStream ライブラリと Boost.Format を組み合わせて行います。 例として、C言語のprintfを用いた Hello World を、C++/Boostを使って書き直してみます。 #include <stdio.h> int main() { printf( "%s\n", "Hell

    C++/Boost 基礎文法最速マスター - 野良C++erの雑記帳
  • ソートアルゴリズムを極める! 〜 なぜソートを学ぶのか 〜 - Qiita

    NTT データ数理システムでリサーチャーをしている大槻 (通称、けんちょん) です。 今回はソートについて記します。 0. はじめに データ構造とアルゴリズムを学ぶと一番最初に「線形探索」や「ソート」が出て来ます。これらのテーマは応用情報技術者試験などでも頻出のテーマであり、アルゴリズムの Hello World とも呼ぶべきものです。 特にソートは、 計算量の改善 ($O(n^2)$ から $O(n\log{n})$ へ) 分割統治法 ヒープ、バケットなどのデータ構造 乱択アルゴリズムの思想 といった様々なアルゴリズム技法を学ぶことができるため、大学の授業でも、アルゴリズム関連の入門書籍でも、何種類ものソートアルゴリズムが詳細に解説される傾向にあります。記事でも、様々なソートアルゴリズムを一通り解説してみました。 しかしながら様々な種類のソートを勉強するのもよいが、「ソートの使い方」や

    ソートアルゴリズムを極める! 〜 なぜソートを学ぶのか 〜 - Qiita
  • 気鋭の縄文陶芸家はなぜC++のエキスパートなのか

    ITに全く関係ない分野からITに飛び込んで活躍しているエンジニア」や「ITIT以外の分野の境界を行き来しながら成果を上げているエンジニア」などを「越境エンジニア」と名付け、1カ月に一人ずつインタビューを掲載する。今月取り上げるのは村上原野(むらかみげんや)氏。縄文土器にインスピレーションを受けた創作を行っている陶芸家だ。同時にネットでは「狂える中3女子ボレロ村上」というハンドルネームでC++に詳しいプログラマーとしても知られている。今回は、縄文文化に深く影響を受けた生い立ちやプログラミングとの出会いなどを聞いた。 私の肩書は縄文造形家であり、陶芸の縄文アートを手掛けています。縄文アートとは、日の縄文時代の造形やスピリットにインスピレーションを受けたアートの総称です。私はその中でも、現代の窯で焼く陶芸とは全く異なる縄文時代の焼き方、土、造形技法といった縄文そのものの技法を再現して創作を

    気鋭の縄文陶芸家はなぜC++のエキスパートなのか
  • C++1zの言語拡張まとめ - Faith and Brave - C++で遊ぼう

    2017年中に改訂される予定のC++14の次のバージョン、仮称C++1zの更新内容をまとめました。正式名称はISO/IEC 14882:2017、通称C++17になる予定です。 C++1zの概要 C++17は、C++11ほど大きな変更はありませんが、重要な言語機能(構造化束縛とか)や、広く適用できるライブラリ機能が多く入っています。ライブラリは、ファイルシステムが入るのが大きいですね。ようやく標準ライブラリのみで、ファイルサイズを取得したり、ファイルのコピーや移動などを扱えるようになります。 策定体制として、Study Group (SG)と呼ばれる専門家グループがたくさん作られ、そこで同時並行に議論、策定が進められていた仕様のうち、固まったものがいくつかC++1zで導入されます。 それぞれの専門家グループで考えられた仕様はTechnical Specification (TS)という単位

    C++1zの言語拡張まとめ - Faith and Brave - C++で遊ぼう
  • 「要素数 4 の配列を渡してください」ではなく「要素数 4 の配列を渡さなければならない」にする - Qiita

    例えば、何も考えずに配列を引数で受け取る関数を考えるとします。 すると、以下のようになるかと思います。 #include <iostream> void Func(const short array[4]) { using namespace std; for (int i = 0; i < 4; ++i) { cout << array[i] << endl; } } int main() { short array[4] = { 0, 1, 2, 3, }; Func(array); return 0; } ぱっと見、なんの問題もないように見えますが、実はこれ、 配列ではなく単なるポインタ扱い になっています。 どういうこっちゃ?どう見ても配列でしょ?と思うかもしれませんが、 以下のコードと実行結果を見れば一目瞭然です。 #include <iostream> void Func(co

    「要素数 4 の配列を渡してください」ではなく「要素数 4 の配列を渡さなければならない」にする - Qiita
  • std::sortとstd::uniqueでstd::vectorの重複要素を削除する - Qiita

    #include <iostream> // std::cout, std::endl; #include <algorithm> // std::unique #include <vector> // std::vector void printVec(std::vector<int> &vec) { std::cout << ""; for (auto it = vec.begin(); it != vec.end(); ++it) { std::cout << *it << " "; } std::cout << std::endl; } int main() { std::vector<int> vec = {10,40,40,20,20,30,20,20,40}; std::unique(vec.begin(), vec.end()); printVec(vec); // 10

    std::sortとstd::uniqueでstd::vectorの重複要素を削除する - Qiita
  • ポインタは用法用量を守って正しくお使いください - kikairoya’s diary

  • C++のswitch文でオブジェクトを生成しようとするとエラーになる - asakawajunyaのブログ

    きっと知っている人にとっては当たり前なんでしょうが、ハマッたので備忘録として。 サンプルコード(コンパイルエラー版) #include <iostream> using namespace std; struct Hoge { int i; }; Hoge get_hoge(int i) { switch(i) { case 1: // { Hoge hoge = {1}; return hoge; // } default: // { Hoge hoge = {2}; return hoge; // } } } int main(int argc, char **argv) { Hoge hoge1 = get_hoge(1); cout << hoge1.i << endl; Hoge hoge2 = get_hoge(2); cout << hoge2.i << endl; retu

    C++のswitch文でオブジェクトを生成しようとするとエラーになる - asakawajunyaのブログ
  • Bjarne Stroustrupのプログラミング入門書の査読の感想

    C++の設計者ストラウストラップによるプログラミング入門書の最新版日語訳が、9月に @asciidwango から出版されます。 https://t.co/ssT9ubfXtT — アスキードワンゴ編集部 (@asciidwango) August 5, 2016 アスキードワンゴ編集部からBjarne StroustrupのProgramming -- Principles and Practice Using C++というの第二版の邦訳が出版される。初版は翔泳社が出していたが、C++14に対応した改訂版の第二版の版権が空いていたので、アスキードワンゴから出すための作業をしていた。私は邦訳の査読をした。 今年になってから半年は、ずっとこのの査読をしていた。このためにC++標準化委員会の最新の文書を把握する作業が数ヶ月ほど滞った。そして、この仕事は、私がドワンゴに入社して以来、最悪の

    Bjarne Stroustrupのプログラミング入門書の査読の感想
  • LLDBを使ってCのデバッグをする - Qiita

    #include <stdio.h> int main(int argc, char **argv) { char *test = "This is a debug demo."; char *name = "edo"; int age = 20; printf("Name: %s, Age: %d\n", name, age); return 0; } そしてこれをコンパイルするとhogeファイルができるのでここからデバッグ開始です。 ファイル名を指定してlldbを起動 lldbの起動にはいくつかあるみたいですが、一番シンプルなのはデバッグ対象のファイルを指定することでしょう。 以下のように、先ほどコンパイルしたファイルを指定して実行してみます。

    LLDBを使ってCのデバッグをする - Qiita
  • C++erを簡易的にレベル分けすることで初心者詐欺を減らそうという試み - Qiita

    はじめに @takeokunn そういや私の昨日のツイートたどってみ、C++初心者(boost.asioが使えないとは言っていない)の人とQiitaでやりとりしてたから — yumetodo-C++erだけど化学科 (@yumetodo) 2016年5月3日 @yumetodo だからC++erの初心者は初心者じゃないんだよ!!!!!!!!!!!!! だからC++er嫌いなんだよ!!!!!!!! — たけてぃ (@takeokunn) 2016年5月3日 @takeokunn 当人も「そろそろ中級者かな」 と言ってた 因みに C初心者 < C++初学者 < C++入門者 < C++初心者 < C++規格書リーディング初心者 < C++中級者 < C++規格書リーディング中級者 < C++上級者 < C++規格書クラッカー — yumetodo-C++erだけど化学科 (@yumetodo)

    C++erを簡易的にレベル分けすることで初心者詐欺を減らそうという試み - Qiita
  • Vim で C++ を書くときの逆引きリファレンス - はやくプログラムになりたい

    この記事は C++ AdventCalendar 2013 の 10 日目の記事です. 記事では VimC++ を書いている人を対象として,逆引きで Vim の機能やプラグインについて紹介していきます. すべてについて細かく書いているとキリが無いので,基的な使い方とプラグインのリポジトリへのポインタ,主要な記事へのリンクを載せています. より詳しく知りたい場合はリポジトリ内の README やドキュメント(/doc内にあります),プラグインインストール後の :help コマンドを利用してください. また,何か問題が発生した場合など,助けが必要な場合は Lingr というチャットサービスの Vim 部屋でも対応してもらえることがあります. http://lingr.com/room/vim 目次 シンタックスハイライト C++11 のシンタックスハイライト(cpp-vim) 補完す

    Vim で C++ を書くときの逆引きリファレンス - はやくプログラムになりたい