C++

Boost.Coroutine

Boost.CoroutineがBoost 1.55で新しいインターフェイスを搭載したとの事なので、何をどう書けばどう動くかを書いてみます。 pull_type/push_type? 今までのBoost.Coroutineは何か良く分からないシグネチャを持ったcoroutine関連らしきクラスを引数として、…

Boost.Coroutineの速度

前略。 http://d.hatena.ne.jp/joynote/20121207/1354863235 この記事のコードを改造して、生でカウンタとif文で動きを制御するコードを追加。 コルーチンを使った場合と、煩雑になるが生で制御した場合の速度差を実測した。検証コードが厳密じゃない(タイ…

DXライブラリを使った非同期ファイルロード(真)

DXライブラリが公式に非同期読み込みに対応したので、それについての情報を纏めておく。 コレhttp://homepage2.nifty.com/natupaji/DxLib/function/dxfunc_other.html#R21N1 に関する注意事項。 LoadGraph等を実行した時点でのフラグで動作する SetUseASyncL…

DXライブラリでスレッドを使ったファイルロード

Cation 2012/1/29に公開されたDXライブラリ3.07で非同期読み込みが公式にサポートされたので、特殊用途以外では以下の記事の内容はあんまし意味ないです... ……また自力で実装した機能が1ヶ月以内に公式サポートだよどうなってんのorz DXライブラリ環境でマル…

move semanticsについて

人/後輩に教える時用の脳内カンペ。ムーブセマンティクス(move semantics)というのは、コピーではなく、所有権の移動をさせるように動作するような考え方のこと。 例えば、下記のコードで MyClass a; // aというインスタンスを作成 MyClass b = a; // aの中…

Boost.Geometryを使って2Dゲーム当たり判定で楽をしたい

メモ: 参考:https://sites.google.com/site/boostjp/tips/geometry 線同士の交点を求める namespace bg = boost::geometry; typedef bg::model::d2::point_xy<double> point; bg::model::linestring<point> line1 = boost::assign::list_of<point>(0, 200)(300, 400); bg::model:</point></point></double>…

暗黙のmoveとNRVO

VS2010(VC10)にて関数で返す値についての扱いをついったーで突っ込まれて実際書いて確かめた時のメモ。 #include <iostream> #include <vector> #include <boost/timer.hpp> struct Test{ std::vector<int> tmp; Test(){ std::cout << "コンストラクタ" << std::endl; } ~Test(){ std::cout << "デス</int></boost/timer.hpp></vector></iostream>…

range-based for

gcc 4.6.1をビルドしたので動作確認。 #include <iostream> #include <list> #include <memory> struct Task{ int id; Task(int id) : id(id){ std::cout << "Create Task : " << id << std::endl; } ~Task(){ std::cout << "Delete Task : " << id << std::endl; } void update(){ s</memory></list></iostream>…

ムーブセマンティクス(Move Semantics)はテクニックにすぎない

正確には、C++0xではムーブセマンティクスを実現"しやすく"なっただけで、 ムーブ自体は昔からのテクニックに過ぎない。 という事をやっと理解したっぽい?メモ。 #include <iostream> #include <vector> #include <string> std::vector<std::string> add_bar(std::vector<std::string> lhs) { lhs.push_back("bar</std::string></std::string></string></vector></iostream>…

Union Findデータ構造を実装

C++

大学院の授業で最小スパニング木をやって、その実装方法の途中でやったUnion Findを忘れないうちに実装。 美しいアルゴリズムを見ると本当にSUGEEEEEEEEEってなるよね。 #include <iostream> #include <vector> class UnionFind{ private: std::vector<int> data_array; const int r</int></vector></iostream>…

ローカルな型とか無名型をテンプレート引数として使う

ローカルな型とか無名型をテンプレート引数として使える。 ・・・オブジェクト生成時ってどうするんだろ? とりあえず動くもの。 ローカルな型 #include <vector> #include <iostream> using namespace std; int main(){ struct data{ int a,b,c; } object = {1,2,3}; vector<data> v</data></iostream></vector>…

前回のカスタムデリータ使うときの話で

http://d.hatena.ne.jp/gintenlabo/20110121/1295626957にstd::functionの型消しの影響で最適化かかりにくいし、実行効率・メモリ効率も悪いよね的な事が書かれていたので、これは実測して試してみるしかないネという事なのでした。 #include <iostream> #include <memory> #in</memory></iostream>…

std::unique_ptrとカスタムデリータ使ったやっつけリソース管理メモ

現実逃避コーディングなう #include "Dxlib.h" #include <memory> #include <functional> int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) { ChangeWindowMode( TRUE ) ; if( DxLib_Init() == -1 ) { return -1;} SetDrawSc</functional></memory>…

lambda式をもっと刺激的に使う

面白い話を小耳に挟んだのでメモメモ #include <iostream> #include <vector> #include <functional> using namespace std; int main(){ vector<vector<int>> array; vector<int> tempA = {1,2,3,4,5,6,7,8,9,10}; array.push_back( tempA ); vector<int> tempB = {11,12,13,14,15,16,17,18,19,20}; array.push_ba</int></int></vector<int></functional></vector></iostream>…

boost::threadとstd:functionとか

#include <iostream> #include <boost/thread.hpp> #include <Windows.h> using namespace std; int main() { // Aスレッド起動 boost::thread thr( [](){ // Aスレッド内でBスレッド起動 boost::thread thr( [](){ for(size_t i=0;i < 100; ++i){ cout << "B"; Sleep(100); } } ); for(size_t i=0;i </windows.h></boost/thread.hpp></iostream>…

グローバルじゃない乱数生成(線形合同法)

C++

良質な乱数でなく、ゲームとかの演出その他程度に手軽に使う用の乱数生成用クラス #include <iostream> using namespace std; class RandomGenerator{ static const long int A = 22695477; static const long int C = 2531011; private: long int x; public: // 初期</iostream>…

イベントモドキ

std::list<std::function<bool ()>> ev_list; // 終了条件を満たしたとき、trueを返す関数オブジェクト auto lambda = []()->bool { static int i=0; cout << i++ << endl; if(i <= 20) return false; else return true; }; // リストの中にブチ込む ev_list.push_back(lambda); // </std::function<bool>…

lambdaさんの日常

#include <iostream> using namespace std; int main(){ auto lambda = []()->bool { static int i=0; cout << i++ << endl; if(i <= 20) return true; else return false; }; while( lambda() ); } 出力結果 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 便</iostream>…

trailing return type

#include <iostream> using namespace std; auto func()->int{ return 3; } int main(){ cout << func(); } 出力結果 3 ・・・オイコラ。絶対コレ、ラムダ式のついでに実装しただけだろ。 返り値の型を可変にしたいならtemplateでいいし、そもそもコレじゃ実現できない</iostream>…

std::random

Boost.randomのメルセンヌツイスター(あんまし偏らない乱数)がstd::tr1に入っていたので使ってみた。 #include <functional> #include <iostream> #include <algorithm> #include <random> #include <time.h> using namespace std; int main(){ // 現在時刻をシードにする mt19937 engine(static_cast<unsigned long>(time(0</unsigned></time.h></random></algorithm></iostream></functional>…

RAIIとかPImplとか

C++

C++イディオムをこう……使いこなしたい 特にRAIIはリークを防ぐのに効果的なんで使ってるつもりなんだけれども、 例外を投げられたりする時に対応してないんだよね

C++0xのムーブセマンティクスと右辺値参照について悩む

C++

ムーブコンストラクタ Object::Object(Object&& obj) { member = obj.member; // 内部のメモリをコピーする obj.member = 0; // コピー元へのメモリの参照を消す } で、つまり要素をコピーしないのだー! はやいぞー! ……と、魔導書(コレ:株式会社ロングゲ…

std::bindをやっと理解

bindが今までイマイチ理解できてなかったけど、書いてみたら一発で理解。 要は、function(関数ポインタ/関数オブジェクト/ラムダ式)の引数を束縛して新しいfunctionオブジェクトを生成してるのね。 #include <functional> #include <iostream> using namespace std; void Func(int </iostream></functional>…

「C++0x」 std::lambda

C++

#include <functional> #include <iostream> using namespace std; int main(){ auto A = [](function<void ()> rhs)->int { cout << "lambda str!" << endl; // 引数で取った返り値なし:void,引数なし:()なfunctionを実行 rhs(); return 3; }; // void ()なラムダ式を、上のラムダ式に渡す </void></iostream></functional>…

std::bindを理解の続き

#include <functional> #include <iostream> using namespace std; struct Test{ void Func(int a, int b) { cout << a*b << endl; } }; int main(){ function<void (int)> func; Test t; func = bind(&Test::Func,&t,placeholders::_1,3); func(3); return 0; } func = bind(&Test::Func,&t,pl</void></iostream></functional>…

std::function

#include <functional> #include <iostream> using namespace std; // 関数オブジェクトを定義 class Func{ public: int operator()() { cout << "class str!" << endl; return 1; } }; // 関数を定義 int str() { cout << "func str!" << endl; return 2; } int main(){ function<int ()> </int></iostream></functional>…

std::unipue_ptrとstd::listその他の華麗な連携

VS2010すげえ! っていうか、C++0xが素敵っ! 下のようなのが書ける。 #include <list> #include <memory> #include <iostream> #include <utility> #include <algorithm> using namespace std; class Unit{ public: int pos_x,pos_y; Unit(int x, int y) : pos_x(x),pos_y(y){} virtual void Draw() = 0;</algorithm></utility></iostream></memory></list>…

アーカイブ内のフォントデータの読み込み

微妙に詰まったので記事る。 DXアーカイブ内に格納したTTFファイルを読んで、DXライブラリに登録するまでのコード。 // arc.dxa内にフォントファイル(font.ttf)があるとする int font_handle; void FontLoad() { int FONT_SIZE = 32; const char* filename =…

深い/浅い コピーについて

C++

インスタンスのコピーには、深いのと浅いのがある。 C++のクラスにおいて自動生成されるコピー動作(コピーコンストラクタ)は、「浅い」コピー。 浅いコピーは、基本的にメンバを全て複製する。 まぁ・・・コピーなんだから当然なのだけど、コピーされるオ…

std::vectorの効率的な回し方

C++

std::vectorの効率的な回し方 #include <iostream> #include <vector> using namespace std; int main(){ vector<int> v; v.push_back(10); v.push_back(20); // vectorの範囲チェックを一回で終わらせておく // そして、生成破棄の早い自動変数かつ、初期化時に代入で無駄を省く si</int></vector></iostream>…