Pebble Coding

ソフトウェアエンジニアによるIT技術、数学の備忘録

C++11

C++11のmove()でvectorの所有権を移動すると、元のvectorの要素数は0になる

いまいちC++11のmove()の動作が覚えられないので、動作サンプルを書き溜めて覚えたい。 // 検証環境: OSX 10.10.3 Xcode6.3.2 GNU++11 #include <utility> // move() #include <vector> using namespace std; struct JOB { int reward; }; vector<JOB> get_job(void) { vector<JOB> v_jo</job></job></vector></utility>…

C++11でのcondition_variableを使ったマルチスレッド制御

#include <thread> #include <mutex> #include <queue> #include <unistd.h> // usleep using namespace std; mutex print_mutex; // printf()呼び出し排他用 mutex queue_mutex; // v_queue排他アクセス用 queue<int> v_queue; // データキュー condition_variable ready_cond; // 条件変数 void </int></unistd.h></queue></mutex></thread>…

C++11でのスレッドの生成とmutexによるリソースアクセス排他処理

#include <thread> #include <mutex> using namespace std; mutex m; // printf()呼び出し排他用 void worker( void* p ) { int data = *(int*)p; { // printfはスレッドセーフではないので、2つのスレッドから排他的にアクセスする。 // lock_guardはlock()のようなメソッ</mutex></thread>…

C++ sorted vectorで範囲削除

sorted vectorに対し、lower_boundで指定値以上、以下のデータを削除するC++のサンプルです。 覚えられないのでメモ。 #include <vector> int main(int argc, const char * argv[]) { auto description = [](std::vector<int> v){ for( auto value : v ){ printf( "%d\n",</int></vector>…

C++ Debug TIPS ステータス遷移

ステータス変化を追う時のデバッグ手法の1つを紹介します。 以下言語はC++です。 enum { kStatusInitial, kStatusDownloading, kStatusDone, ... }; int m_status; 上記のようなステータスを取る変数があり、ステータスの種類が大量にあり、 それを変更する…

好きなソフトウェア技術書TOP5

ネタがないので、本棚にある好きなソフトウェア技術書でも紹介することにする。 あまり本マニアではないので、多分すごく偏っていると思う。 1) Effective-C++ Effective C++ 第3版 (ADDISON-WESLEY PROFESSIONAL COMPUTI)作者: スコットメイヤーズ,小林健一…

C++11

C++11の気になる機能 スライド流し読みして気になったのをpickup. auto型推論 iterator定義のコーディング量が減りそうだけど使うかなあ。 decltype型推論 宣言の仕方覚えるのに時間かかりそう。 ラムダ式 Objective-Cで言うBlocksですが、覚えられるかなあ…

printfによるデバッグ(Objective-C/VisualC++/Ruby/Python/Go/JavaScript/Java)

私がデバッグする際はprintfなどでデバッグ情報をコンソールに出力し、 止めたいところではassert()を埋め込んでおきます。 Objective-Cでは、以下のようなデバッグ出力をマクロを使います。 #define ALog(fmt, ...) NSLog((@"%s [Line %d] " fmt), __PRETTY…

C++のプロダクトに対してtravis CIを使ってみる

travis CIとは何か? githubのpublicなリポジトリのソースに対して、git pushする毎に非同期で、 仮想サーバ(Ubuntu)環境でテストを実行してくれる無料のWEBサービスである。 WEB系言語に加えて、C,C++にも対応しているっぽい。以下の手順を実施した。 1) git…

リファクタリング手法

スクラッチからソースを書くような開発をするのは幸せなことです。 ですが、ほとんどは他人が作ったレガシーコードをだましだまし 使う場合が多いです。 そんな仕事の中で身につけた私のコーディング手法を まとめたいと思います。 1)バージョン管理システ…