タグ

c++に関するgfxのブックマーク (113)

  • misc/cppts-parallel.md at master · herumi/misc · GitHub

  • チェック付き間接参照の提案 またの名をパターンマッチ - Faith and Brave - C++で遊ぼう

    N4127 Checked-dereference conditions ポインタ操作では、以下のように「間接参照可能か(有効な値を指すポインタか)」をチェックしてから間接参照する、というのがよく行われます。 if (p) { T x = *p; } これを以下のように書けるようにしよう、というのがこの提案。 if (T x : p) { } つまり、間接参照ができるなら間接参照をして値を取り出す、までを一つのif文でやってしまおうというものです。 これは、値の判定と取り出しを同時に行う、ミニマムなパターンマッチと見なすことができます。 この機能は、多くの状況で便利に活用できます。 weak_ptrの場合 weak_ptrは、lock()メンバ関数を使用してshared_ptrオブジェクトを取り出します。その際、以下のようなコードを書くことになりますが、 if (shared_ptr<T>

    チェック付き間接参照の提案 またの名をパターンマッチ - Faith and Brave - C++で遊ぼう
    gfx
    gfx 2014/08/03
  • Boost.Multiprecision 誤差の検証 - Faith and Brave - C++で遊ぼう

    [Ruby]消費税計算にはBigDecimalを使いましょう 多倍長演算10進数型で演算を行えば、浮動小数点数の誤差がなくなるという話。C++の多倍長演算ライブラリであるBoost.Multiprecisionは無誤差であるというドキュメント上の規定はとくにないのですが、実際にどうなるのか検証してみました。 まずはdouble まず、多倍長浮動小数型を使わず、doubleでやってみます。 #include <iostream> #include <cmath> int main() { double a = 1800.0; double b = 1.08; double result = std::ceil(a * b); std::cout << result << std::endl; // 1944を期待する } 出力: 1945 期待した1944ではなく、1945が出力されました。

    Boost.Multiprecision 誤差の検証 - Faith and Brave - C++で遊ぼう
    gfx
    gfx 2014/04/11
    “この結果はcpp_dec_floatが無誤差演算であることを保証するものではありません。試しにやったらこういう結果になったというだけですので、ご注意を”
  • Big Sky :: 最速と言われる JSON パーサ「rapidjson」が本当に爆速なのか試してみた。

    なんびとたりとも俺の前は走らせねぇ ガチバトルです。 rapidjson - A fast JSON parser/generator for C++ with both SAX/DOM style API - Google Project Hosting Rapidjson is an attempt to create the fastest JSON parser and generator. Small but complete. Support... https://code.google.com/p/rapidjson/ fastest をうたうとは度胸があるなーと思いながら、半信半疑で試してみました。 rapidjson も picojson 同様に、ヘッダファイルだけあればコンパイル出来る C++ 向け JSON パーサ(およびシリアライザ)です。 まずは rapidjso

    Big Sky :: 最速と言われる JSON パーサ「rapidjson」が本当に爆速なのか試してみた。
    gfx
    gfx 2013/02/15
  • GoogleがB-tree実装のSTLコンテナを公開

    C++ containers that save memory and time cpp-btree - C++ B-tree - Google Project Hosting Googleが、B-tree実装のSTLコンテナー(map, set, multimap, multiset)を発表した。 多くのSTLの実装では、map, set, multimap, multisetは、Red-Black treeで実装されている。Googleの発表によれば、B-tree実装のコンテナーは、赤黒木実装に比べて、速度が上がり、しかもメモリ消費量も削減できるとしている。 紹介まで。 B木は一つのノードに複数の要素を格納する。これにより、ポインターなどのオーバーヘッドを低減でき、メモリ消費量の削減につながる。また、複数の要素を一括してノードに詰め込むため、速度向上もあるのかもしれないが、そのへんはよ

    gfx
    gfx 2013/02/04
  • Redirecting to Google Groups

  • 本当は怖くないムーブセマンティクス - yohhoyの日記(別館)

    この記事はC++ Advent Calendar 2012の15日目にエントリしています。 内容はC++11「ムーブセマンティクス」の入門記事となっています。 もくじ ムーブセマンティクス再考 シンタックス vs. セマンティクス コピー vs. ムーブ ムーブのもつ2つの意味 C++11のムーブセマンティクス対応 auto_ptrからunique_ptrへ auto_ptrの暗い過去 unique_ptrへの移行 std::moveの役割 ムーブセマンティクスを使おう C++11標準ライブラリとムーブ ムーブ"後"の中身は? ムーブを利用して関数を書く (文のみ約9500字) まえがき To move or not to move: that is the question. ― Bjarne Stroustrup, 2010(改)*1 プログラミング言語C++の新しい国際標準規格*2

    本当は怖くないムーブセマンティクス - yohhoyの日記(別館)
    gfx
    gfx 2012/12/16
  • いまさらVariadic Templatesをまとめてみる - Drawing Codes

    この記事はC++ Advent Calendar 2012の13日目です。 Variadic Templatesとは C++11ではテンプレートで"."を3つ付けることが出来るようになりました、 こんな感じで。 template <class... Ts> これで何が出来るのかというと、0個以上の任意のテンプレート引数を受け取れるようになります。このとき、Tsをテンプレートパックと呼びます。 Variadic Templateはテンプレートクラスと関数テンプレートの両方で使うことが出来ます。 テンプレートクラスの場合 template <class... Ts> class hoge; このように書かかれていれば、 hoge<> hoge< long > hoge< int, short > こんな感じで型を渡すことができるようになります。 また、class...のように型だけでなくint

    いまさらVariadic Templatesをまとめてみる - Drawing Codes
  • 数独の高速化 - Cybozu Inside Out | サイボウズエンジニアのブログ

    「サイボウズ・アドベントカレンダー」の4日目です(これまでの記事一覧)。どうやら三日坊主は免れたようです(笑)。 (0) はじめに こんにちは。サイボウズ・ラボの川合秀実です。私は主にサイボウズ製品の高速化のお手伝いをしています。しかし先日、製品とは関係ないものを高速化したので、今日はそれを発表します。 サイボウズには社内勉強会がいくつかあって、その中にはC++の勉強会もあります。私はサイボウズの勉強会に参加するのが好きなので、このC++の勉強会に参加してみました。この勉強会では、「数独」というパズルを解くプログラムをC++で書いてみよう、というのが最初のテーマでした。参加者各自がプログラムを書き、翌週にお互いにレビューしあうということが行われました。 ここで私はやらかしてしまいました。ええ、そうです、高速化してしまったのです! 言うまでもないですが、誰もこんなことは望んでいません。そもそ

    数独の高速化 - Cybozu Inside Out | サイボウズエンジニアのブログ
  • C++11時代のthreading - fjnlの生存記録のような何か

    始めに 記事は C++11 Advent Calendar 2011 : ATND の6日目です。 std::thread C++11時代のthreadの基は std::thread です。おもむろに #include をしましょう。std::threadはコンストラクタで渡された関数オブジェクトを別スレッドで実行します。 #include <iostream> #include <thread> void f() { std::cout << "f()" << std::endl; } int main() { std::thread thr(f); thr.join(); return 0; } このプログラムを実行すると f() と表示されるはずです。コンパイルして実行してみます。 $ g++ -o thr thr.cpp -std=c++0x $ ./thr f() $ 確かに

    C++11時代のthreading - fjnlの生存記録のような何か
    gfx
    gfx 2012/11/23
  • futureとpromiseのあれこれ(理論編) - yohhoyの日記

    C++11標準ライブラリで新しく追加されたstd::promiseとstd::futureについてメモ。 future/promiseの基 両者ともに標準ヘッダ <future> にて定義されるクラステンプレートであり、「別スレッドでの処理完了を待ち、その処理結果を取得する」といった非同期処理を実現するための部品*1。 処理結果として、通常の戻り値(value)または例外(exception)を扱う*2。戻り値の型はテンプレート引数にて指定するが、例外は任意の型を扱うことができる。(例: int型を扱うならstd::future<int>, std::promise<int>を用いる。例外はstd::exception_ptrを利用するため任意の型を伝搬可能。) future は計算処理の完了待ち(同期機構)と結果取り出し(通信チャネル)機能を提供する。 promise は計算処理の結果

    futureとpromiseのあれこれ(理論編) - yohhoyの日記
  • C++ のヘッダファイルを #include するだけで使える GC 書いてみた - kazuhoのメモ置き場

    そういえば C++ のヘッダファイルを #include するだけで使える GC を書きました。使い方は下のサンプルコードを見てもらえばいいとして、特徴としては、 ヘッダファイルを #include するだけで使える C++ の標準機能だけを使っているのでポータブル*1 mark-and-sweep, precise GC ってなあたりでしょうか。コードは GitHub - kazuho/picogc: a tiny, portable, precise, mark-and-sweep GC in C++ にあります。 C++プロジェクトで、ちょっとここだけは GC がほしいんだけど、ってなケースで使いやすいと思います。速度も、そこそこでるんじゃないかな*2。 というわけで、以下、サンプルコード。軽く説明しておくと、 GC を使うクラスは picogc::gc_object を継承する

    C++ のヘッダファイルを #include するだけで使える GC 書いてみた - kazuhoのメモ置き場
    gfx
    gfx 2012/03/27
  • ゲーム開発とSTL - とあるぼっちの生存報告

    コンシューマ向けゲーム開発に携わって結構な年数が経過しました。 これまでは恵まれていたのか、STLを使える環境にいた*1ので特に気にしていなかったのですが、どうやら場所によってはSTLはゲーム開発向きではないらしく使用を禁止される事もあるようです。 おかしいですね。私、STL使ってコンシューマ向けのゲーム作ってきましたけど。 確かにSTLはその特性と使用方法を知らないと痛い目にあいます。特にコンシューマ機のメインメモリ容量はPCに比べて圧倒的に少ないです。その少ないメインメモリ上に実行バイナリやヒープ領域などを展開しなければなりません。メモリ管理に対してシビアになるのは当然で、templateは使用方法によってはバイナリサイズが増大するので使用をある程度制限する事は仕方ありません。 また、std::listや、std::map等は使えば使う程内部でメモリを平然と分断してくれるので、ヒープ領

    ゲーム開発とSTL - とあるぼっちの生存報告
    gfx
    gfx 2012/03/11
  • 「なぜsetを使っちゃいけないの?」

    CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

    「なぜsetを使っちゃいけないの?」
    gfx
    gfx 2012/02/28
  • C++ のテストフレームワークを選ぶポイント - Cube Lilac

    Boost.勉強会 #8 大阪 に参加してきました。発表者、運営者の皆様お疲れ様でした。今回もいろいろと黒魔術的な発表があり「これが変態かー」と感慨深く見ていたのですが、それはそれとして、個人的に気になっていたテーマとして「C++ でのテスト」に関連する発表が 2 件ほどあったので、楽しみにしていました。 C++でテスト駆動開発 - @akineko Boost.Testの紹介 - @hotwatermorning C++ のテストフレームワークも数多く公開されており、好みや用途によって選択肢が変わって来るのですが、まぁ今だと選択肢として挙がるのは「Boost.Test か googletest か」になってくるのかなと思います。どちら(もしくは、上記以外を含めたどれか)を選択すべきか、と言う問いに対しては、残念ながら現状でも決め手となるものに欠けているのですが、自分が利用する上で選択する

    C++ のテストフレームワークを選ぶポイント - Cube Lilac
    gfx
    gfx 2012/02/15
  • How to use C++ with Bison

    Introduction This is a mini-tutorial that describes how to use C++ with Bison. It was done in reply to a thread in comp.compilers that questioned how %union declarations would interfere with C++ strong type checking. I assume that you already know C++ and how to use Bison, so I will talk just about the important parts. Grammar For the example lets use the following BNF grammar. It's too simple and

    gfx
    gfx 2012/02/05
  • boost 1.48.0 flat_set はえー

    目次 ホーム 連絡をする RSS Login Blog 利用状況 投稿数 - 1078 記事 - 2 コメント - 25642 トラックバック - 363 ニュース 著作とお薦めの品々は 著作とお薦めの品々は 東方熱帯林へ。 わんくま 東京勉強会#2 C++/CLI カクテル・レシピ 東京勉強会#3 template vs. generics 大阪勉強会#6 C++むかしばなし 東京勉強会#7 C++むかしばなし 東京勉強会#8 STL/CLRによるGeneric Programming TechEd 2007 @YOKOHAMA C++C++/CLI・C# 適材適所 東京勉強会#14 Making of BOF 東京勉強会#15 状態遷移 名古屋勉強会#2 WinUnit - お気楽お手軽UnitTest CodeZine Cで実現する「ぷちオブジェクト指向」 CUnitによるテスト駆

  • Accessing Private Data

    gfx
    gfx 2012/01/12
  • privateメンバに外部から非侵入的にアクセスする - redboltzの日記

    はじめに C++では通常、クラスのprivateメンバに外部からアクセスすることができない。 アクセスするためには、friend関数やfriendクラスを用いる。 しかし、 http://bloglitb.blogspot.com/2010/07/access-to-private-members-thats-easy.html で話題となり、Daveが、 https://gist.github.com/1528856 にエッセンスを抽出したコードを起こしているが、privateメンバに外部から合法的にアクセスする方法がある。 Daveのコードのコメントだけで必要十分かもしれないが、私は理解するのにかなり時間がかかってしまったので、その経緯を忘れないためにもここに書いておきたいと思う。 メンバポインタの復習 まずは、このコードを見て欲しい。 http://ideone.com/dGRqg

    gfx
    gfx 2012/01/12
  • Objective-C++11 - 星一のはてなブログ

    この記事は Mac Dev JP Advent Calendar の参加記事 (6 日目) です。 はじめに この記事では、 Objective-C++C++11 を使用する例について紹介します。 Objective-C++ とは Objective-C++ は、プログラミング言語 Objective-C と C++ とを多重継承したような言語です。お互いの文法がかち合わないので、混在することができます。極稀に文法がコンフリクトしますが、個人的にはそれで困ったことはありません。文法的にほぼ直交し、お互いのオブジェクトを単なるポインタ値とみなしているため、混在させることができるのです。 Objective-C と C++ の機能をオーバーラップさせるようなことはできません。例えば、 Objective-C のクラスを C++ で継承したりするようなことはできません。 Objective

    Objective-C++11 - 星一のはてなブログ
    gfx
    gfx 2011/12/06