タグ

関連タグで絞り込む (0)

  • 関連タグはありません

タグの絞り込みを解除

ProgrammingとC++とdeferredに関するagwのブックマーク (154)

  • C++11で始めるマルチスレッドプログラミングその1 ~std::thread事始め~ - すいバカ日誌

    この記事は、C++11におけるマルチスレッドプログラミング入門記事という位置づけで書かれたものです。簡単のため、表現が曖昧になったりしている部分があると思いますが、もっと厳密に知りたいという方はC++の規格を参照してください。 C++11のマルチスレッドライブラリ C++03までは、マルチスレッドプログラミングを行うための言語機能やライブラリが標準で用意されていませんでした。そのため、プログラマはしばしばプラットフォームに依存したコードを書く必要がありました。 しかしC++11から、thread-aware memory modelなどの定義や、マルチスレッドをサポートするための言語機能とライブラリが導入されました。これによって、プログラマは抽象度の高いコードを用いてマルチスレッドプログラミングを行うことが容易になりました。 記事では、事始めとしてstd::threadを用いて簡単なプロ

    C++11で始めるマルチスレッドプログラミングその1 ~std::thread事始め~ - すいバカ日誌
  • これだけ読めば全部がわかるC++のoperator new/deleteオーバーロードの注意点 - 株式会社CFlatの明後日スタイルのブログ

    ……とか言いながら、全然「だけ」に留まらない分量になってるのは仕様(C++の)。 なお記事は、operator new/deleteの概念はある程度理解し、その気になればメモリリークしない程度のoperator new/deleteを実装できるC++erに向けて書かれたものです。operator new/deleteの中身(new_handlerの呼び出しとか)についての説明は行ないませんので悪しからず。 記事で「規格書」と言った場合、正式なC++11の規格書ではなくhttp://d.hatena.ne.jp/heisseswasser/20121225/1356462583:N3337を指しています。 また、特に明記のない限り、記事でoperator new、operator deleteと言った場合、配列版のoperator new[ ]、operator delete[ ]につ

    これだけ読めば全部がわかるC++のoperator new/deleteオーバーロードの注意点 - 株式会社CFlatの明後日スタイルのブログ
  • C++11 では NULL ではなく nullptr を使う - C++ プログラミング

    C++ では NULL は 0 で定義されているため、オーバーロードされた関数を呼び出すようなときに予期しない動作をすることがありました。そんな問題を補うために C++11 では nullptr というキーワードが用意されています。 ここでは、従来の NULL と C++11 で規定された nullptr とを比較しながら、それらの使い方について見て行きたいと思います。 NULL や nullptr の効果 NULL や nullptr は、ポインタに格納されている値が「何もない」とか「空である」といった意味を持たせるためのキーワードです。 このようなとき、最終的にはポインタに 0 が代入されるのですけど、例えば次のように単に 0 を代入しただけでは、プログラムには「0 を代入している」以上の意味が込められません。

  • C++11における同期処理(std::mutex, std::unique_guard, std::lock_guard, std::condition_variable) - Qiita

    前回は非同期処理についてまとめたが、 今回は並行(concurrent)処理中の同期が必要な処理をC++11で実行するために必要な知識をまとめていく。 ThreadPoolを実装するために必要な知識として、 mutexによるロック 条件変数の使い方 をまとめる。 ThreadPoolはまた次回に持ち越しである。 mutexを用いたロック: std::unique_lock or std::lock_guard ? スレッド間でもプロセス間でも相互排他処理、 つまりある操作を同時に実行するスレッド/プロセスが一つである事を保証する必要がある場合がある。 このような排他的に実行する必要のある処理をクリティカルセッションと呼ぶ。 相互排他処理を実現するための同期機構としてmutexというものがある。 Wikipediaによれば相互排他(MUTual EXclusion)の省略形が語源だそうだ。

    C++11における同期処理(std::mutex, std::unique_guard, std::lock_guard, std::condition_variable) - Qiita
  • コンテナに複数の並び順を持たせる - boostjp

    std::vectorやstd::mapといったコンテナを使用していると、希に「mapとして使いたいけど挿入順も覚えておきたい」といったことや、「mapに、値からキーを検索する機能がほしい」といった要求が出てくることがある。そういった要求を叶えてくれるのが、Boost Multi-Index Libraryである。 インデックス boost::multi_index_containerの基的な使い方 - 挿入順を知っているstd::set インデックスの表現を変数に持つ インデックスに名前を付ける インデックスと標準コンテナの対応表 複数のキーを持つmapを定義する 双方向mapを定義する 要素を書き換える 並び順を動的に変更する boost::multi_index_containerの基的な使い方 - 挿入順を知っているstd::set Boost.Multi-Indexでは、bo

  • シングルトンパターン

    サービス終了のお知らせ いつもYahoo! JAPANのサービスをご利用いただき誠にありがとうございます。 お客様がアクセスされたサービスは日までにサービスを終了いたしました。 今後ともYahoo! JAPANのサービスをご愛顧くださいますよう、よろしくお願いいたします。

  • C++11 random 覚え書き - 簡潔なQ

    C++11以降では<random>ヘッダで良質な擬似乱数を得ることができる。 #include <random> 外部からの乱数 外部から乱数を得るにはrandom_deviceを使う。 #include <random> #include <iostream> int main() { std::random_device rand_dev; std::cout << rand_dev() << std::endl; std::cout << rand_dev() << std::endl; return 0; } 上のように、外部からの乱数源は関数として呼び出すことで乱数を生成する。 このプログラムは実行するごとに異なる値を出力する。 擬似乱数 擬似乱数は、シード値を放り込むと乱数っぽい数列を吐き出すプログラム。 生成方法が何種類かあるが、mt19937だけ把握していればよい。 #in

    C++11 random 覚え書き - 簡潔なQ
  • ニコニコ生放送

  • C++ マルチスレッド 入門

    constexpr関数はコンパイル時処理。これはいい。実行時が霞んで見える。cpuの嬌声が聞こえてきそうだ

    C++ マルチスレッド 入門
  • 前置インクリメント vs 後置インクリメント | 闇夜のC++

    後置インクリメントにはひと目で遅くなりそうな処理が見て取れますね。 前置インクリメントがインクリメント処理後、単純に自身の参照を返すのに対し、後置インクリメントではインクリメント前に一時オブジェクトの生成、そしてインクリメント後にはその前に生成した一時オブジェクトを値で返しています。 前置と後置では、単純にオブジェクトをコピーして返す分、普通に考えたら後置の方が遅いよね。というのが従来の認識でした。 「C++ Coding Standards -101のルール、ガイドライン、ベストプラクティス」の中でも、特に後置インクリメントの必然性が無い時は迷わず前置インクリメントを使うことが推奨されてきました。 元の値を必要としないときは前置形式の演算子を使おう __C++ Coding Standards (p50) 新たな主張 「ゲームエンジン・アーキテクチャ第二版」の中の一節を紹介します。 しか

  • ドワンゴのプログラミングコンテストをクリアできなかったお話

    dwangoプログラミングコンテスト2016 ドワンゴが主催するプログラミングコンテストの予選が、24日に行われたそうだ。筆者はクリアできなかったが、簡単なものだけ解説する。格的な解説が読みたい人は、わざわざこの記事を読まずとも、以下で解説されているようだ。 「dwangoプログラミングコンテスト」予選問題解説 // Speaker Deck A: プレミアム会員 - dwangoプログラミングコンテスト | AtCoder ニコニコ動画には、プレミアム会員という制度があります。このプレミアム会員制度には月額一定の額を支払うことで加入できます。 ニワンゴくんは、この n ヶ月間連続してプレミアム会員です。 また、x ヶ月前に月の一定支払い額が 525 円から 540 円に変わったことを知っています。 つまり、この n ヶ月のうち最近の x ヶ月間は月額 540 円支払っていて、それ以外の

  • std::beginとstd::endの使い方 - Faith and Brave - C++で遊ぼう

    コンテナからイテレータを取り出すstd::begin()関数とstd::end()関数は、テンプレート外では名前空間修飾を付けて呼び出す使い方でいいが、テンプレート内で使用する場合は、using宣言した上で名前空間修飾なしに呼び出す必要がある。(std::swap()と同じ) #include <iterator> template <class Range> void f(const Range& r) { using std::begin; using std::end; auto first = begin(r); auto last = end(r); // use first, last... } #include <vector> int main() { std::vector<int> v = {1, 2, 3}; int ar[] = {4, 5, 6}; f(v); f

    std::beginとstd::endの使い方 - Faith and Brave - C++で遊ぼう
  • C++の正規表現ライブラリ: std::regex

    いまさらながら、C++の正規表現ライブラリを調べている。 C++の正規表現ライブラリ、std::regexは、boost::regexを土台に設計されている。boost::regexの正規表現の文法は、perlなのに対し、std::regexは、ECMAScriptである。この理由は、しっかりと正規表現の文法が定義されていて、外部規格として参照できる品質のものが、perlには存在しないためだ。std::regexはposixと拡張posixとawkとgrepとegrepの正規表現にも対応している。 記事では、ECMAScriptの正規表現を使う。また、参考のためのECMAScriptのコードも使う。 全体一致 文字列全体が正規表現に一致するかどうかを調べたいとする var re = /1234/ ; var text = "1234" ; var result = re.test( te

  • 連想配列 std::unordered_map を使用する - C++ プログラミング

    C++11 では、キーと値をセットで管理する連想配列を簡単に利用できる std::unordered_map<> というテンプレートクラスが用意されています。 これを使用することで、キーに対する値を追加したり削除したり、挿入したりといったことが簡単にできます。テンプレートクラスなので、任意のデータ型を扱えるのも便利です。 ここでは、その std::unordered_map<> の基的な使い方について見て行きます。 ちなみに、std::unordered_map<> は、キーを登録した順番とは関係なく(ハッシュを使って)格納するタイプのものになります。 キーを順番通りに(キーと値を辞書的順序で)格納したい場合は <map> ヘッダーに定義されている std::map<> を使用します。std::map<> と std::unordered_map<> の使い方は基的に同じです。 また、

  • マイクロソフトは、C++でいかにしてMicrosoft Officeのクロスプラットフォームを実現したのか

    マイクロソフトは、C++でいかにしてMicrosoft Officeのクロスプラットフォームを実現したのか マイクロソフトはOfficeソフトウェアのマルチプラットフォーム展開を進め、Windows版、Macintosh版だけでなくWebから使えるOffice Onlineに加え、iPad版、Android版も公開を始めました。 Officeのような大規模なアプリケーションのマルチプラットフォームへの移植は、どのようにして行われているのか。9月に米国で開催されたC++言語のイベント「CppCon 2014」で行われた同社の講演「How Microsoft Uses C++ to Deliver Office (and More) Across iOS, Android, Windows, and Mac, Part I 」がYouTubeで公開されています。 Officeのコア部分はC++

    マイクロソフトは、C++でいかにしてMicrosoft Officeのクロスプラットフォームを実現したのか
  • C++のコンパイルとリンクがあまりに遅いのでカッとなって原因と対策を調べてみた - Qiita

    # pragma once // 二重インクルード防止 # include "classA.h" // クラスAのヘッダ →継承してるので必要 // #include "classB.h" // クラスBのヘッダ →前方宣言できるのでcppにインクルードをかけば良い。 # include "classC.h" // クラスCのヘッダ →実態をメンバに持ってるので必要 // #include "classX.h" // そもそもヘッダで使ってない(もしcppで使ってる時は、cppに書くだけでOK) class classB; // 定義がポインタであれば前方宣言だけでOK class classD : public classA { public: ~ private: classB* m_pClassB; // ポインタ classC m_classC; // 実態 }; 継承している場合

    C++のコンパイルとリンクがあまりに遅いのでカッとなって原因と対策を調べてみた - Qiita
  • 左と右の話

    DevLOVE X Day1 C-5のセッションです。 ITの活用範囲の広がりとともに、費用・品質よりもデリバリを優先するプロジェクトも増えてきました。しかし「しっかり考えるよりも、作ってリリースしちゃおうぜ、正解なんて誰にも分からないんだから」というマントラを唱えながら、返済見込みの立たない大量の技術的負債を抱える。それが最善の選択なのか、もう少しだけ立ち止まって考えてみませんか? YAGNIという言葉を便利に使いすぎてはいませんか? コードを書きなぐるのと、ちょっと考えて設計して作るのとで、そんなに開発スピードに違いがありますか? 考えてみたいと思います。

    左と右の話
  • クラスの「継承」より「合成」がよい理由とは?ゲーム開発におけるコードのフレキシビリティと可読性の向上 | POSTD

    コード構造における重要な問題として、複数のクラスを共有する場合に合成と継承のどちらを用いるかという点があります。“has a”の関係と、“is a”の関係と言われる2つの対比です。例えば、“ソファには綿が入っている”と、“ソファは家具である”という違いのようなものです。この例では2つの違いは非常に明白ですが、実際には、“has a”の関係でも“is a”の関係でも意味を成すケースがたくさんあります。ゲームのキャラクターについて、これはコリジョンボックスを持っているかと聞くのと、これは衝突可能なオブジェクトかと聞くような場合です。この2つは全く同じことではありませんが、それぞれが(または両方一緒に)衝突を処理する主構造として用いられ、どちらの方がよいかは必ずしも明白ではありません。私の経験では、直感的には継承の方がよいと思うことも多いのですが、それだと問題がたくさんあって結局は合成の方がよか

    クラスの「継承」より「合成」がよい理由とは?ゲーム開発におけるコードのフレキシビリティと可読性の向上 | POSTD
  • コピーコンストラクタ、代入演算子、デストラクタ - たーせる日記

    C++のためのAPIデザイン』のp.210には、こんな記述があります。 C++の初心者が陥りやすいのは、リソースを割り当てるクラスを作り、それに伴いデストラクタは用意したが、コピーコンストラクタと代入演算子を定義しないことだ。 というわけで、今日はコピーコンストラクタと代入演算子の定義がないと何が起こるのかについて実験してみます。 きっかけ 『ゲームプログラマになる前に覚えておきたい技術』のp.520には即死サンプルという不穏当なコードが掲載されています。 #include <vector> using namespace std; class A { public: A() { mX = new int(); } ~A() { delete mX; } int* mX; }; vector< A > gA; // グローバルにvector void add() { // 配列に足す関数

    コピーコンストラクタ、代入演算子、デストラクタ - たーせる日記
  • C++11 の乱数ライブラリ <random> - Siv3D 開発ブログ

    C++11 では、新しい乱数ライブラリのヘッダ <random> が追加されました。 一様にランダムな整数を生成する「乱数生成エンジン」と、値を特定の方法で分布させる「分布生成器」が用意されています。 乱数生成エンジンは 線形合同法 メルセンヌ・ツイスター Lagged Fibonacci 法 ハードウェアエントロピーソース(時刻や CPU カウンター、I/O の状態など大量の低レベルシステム情報)を利用した非決定論的(予測不可能)な乱数生成 の 4 種類が実装されています。非決定論的な乱数生成以外の手法では、初期シードから擬似乱数列を生成します。 分布生成器は 一様分布 正規分布 ベルヌーイ分布 ポアソン分布 をはじめ多数のアルゴリズムが実装されています。 非決定論的な乱数生成エンジン std::random_device を使ってランダムな値を出力してみましょう。プログラムを実行するた

    C++11 の乱数ライブラリ <random> - Siv3D 開発ブログ