本当は怖いHPC

HPC屋の趣味&実益ブログ

C++

std::tupleとstd::tieを使って複数の配列を一緒にソートする(配列の構造体 SoA のソート)

c++

互いに関連付けられた複数の配列を一緒にソートしたい場合があります. // SoAの例 std::vector<int> student_ids; std::vector<std::string> names; std::vector<int> math_scores; // AoSの例 struct Student { int id; std::string name; int math_score }; 専門的には,SoA(Str</int></std::string></int>…

Variadic templatesで受け取った可変長引数を保存しておいて、後で関数呼び出しに利用する

C++11に、Variadic templatesという機能がある。テンプレートの引数を可変長にできるというものだ。 これによって、型安全でPolymorphicな可変長引数を実現することができる。 参考資料: 本の虫: Variadic Templatesの解説 いまさらVariadic Templatesをま…

C++11とMPIを使ったプロジェクトをTravis CIでテストする

githubで開発しているプロジェクトのCIを実施したいが、C++11をサポートするコンパイラが必要だ。さらに、MPIを使ったプロジェクトではmipcxxとmpirunが必要だ。Github上のプロジェクトのCIを行ってくれるサービスはCircle CIなどもあるが、C++には対応して…

vectorをuniqする

C++

ネット上では散々既出[1][2]ですが、ソート済みのstd::vector重複要素を削除する方法。 スクリプト言語的にはsetを使いたくなるところだけど、非常に遅いらしいので実験してみた。 Compare speeds of "uniq" operation to std::vector 結果 # Intel(R) Core(…

EmacsとCMakeで、自分のコードを cpplint クリーンにする

C++

Google Coding Style というものがあります。コーディング規約は世の中にたくさんあると思いますが、これはGoogle社が発表しているものです。このコーディング規約を採用する上でいくつか便利なツールがあります。一つは、emacs用のgoogle-c-style.elです。…

STLコンテナのconstメンバー関数

C++

3回くらい調べてしまったのでメモ。 STLのコンテナをメンバー変数にもって、constメンバー関数を実装するときに、検索系の関数はconstがあるものと無いものを使い分けないとダメ。 言葉で書くと意味不明ですけど、要はこういうことです。 #include<map> using nam</map>…

placement new

C++

言語処理系のGC 俺Lispのインタプリタを書いていて、stop and copyのGCを書くためにplacement newを勉強してました。 でも、試行錯誤してるうちに気づいたら使ってなかった…orz。せっかくなので、placement newについてまとめ。 詳しくはEffective C++ 第3版…

【広告】