タグ

STLに関するtyruのブックマーク (24)

  • EASTL から垣間見るゲームソフトウェア開発現場の現状 その 1

    (2016/02/10 追記: EASTL は長らく EAWebKit の一部としてライセンスが不明瞭なまま公開されていましたが、この日 BSD ライセンスで正式に公開されました https://github.com/electronicarts/EASTL) 若干古いものですが、2007 年に発表された、Electronic Arts によるゲーム開発向けの改良を加えた STL、"EASTL" の仕様。 http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2271.html 仕様だけで実装が公開されてないのが非常に残念なのですが、それは別として、何故こんなものが必要なのか、どういう事情でこの機能が盛り込まれたのか、といったゲーム開発現場の事情が細かく解説されていて、とても参考になります。特に、既にある程度 C++ に習熟してい

    EASTL から垣間見るゲームソフトウェア開発現場の現状 その 1
  • 2008-12-23

    C++初心者の私がC++をやめたくなった瞬間。 なにをいまさらな。 はじめに C++のstreamはとても良くできていて、これを用いたライブラリを作りたいのだけど、 当に(主にパフォーマンス的な理由で)大丈夫なのとかそういう話。 初めにお断りしておきますが、以下の内容はすべてlinux+gcc4.3での話です。 streamは遅い ふつうにistreamからget()して、ostreamにputしてるとめちゃくちゃ遅い。 C言語のgetchar, putcharより10進数で1.5桁ぐらい遅いよ。 istream::readとかででかいブロック読めば大丈夫なのだけど、 細かい単位で読みたいことの方が多いよね。 そういうわけで、そういう場合にも速く転送することが可能なのかどうか調べてみる。 テストプログラム istreamの内容をostreamに転送するプログラムを6通り書いた。 その1:

    2008-12-23
  • The GNU C++ Library API Reference

  • GCCの拡張機能を使ってSTLもどきを作る | 株式会社きじねこ

    久々に凶悪なマクロプログラムを作ってみました。今回のネタは、GCCの拡張機能を使ってSTLもどきを作るというものです。この類の試みはいろいろなところで行われていると思いますが、その多くはコンテナに関するものだと思います。そこで、今回はアルゴリズム関数に挑戦してみました。 といっても、初回からそんなに高機能を目指すと挫折しますので、まずは反復子として使えるのはポインタに限定することにしました。他の反復子を扱うための手法については、いずれ機会を改めて紹介できればと思います。 今回作ってみたのは、find 関数と find_if 関数です。使い方はSTLのそれとほぼ同じなので、とくに説明はいらないでしょう。Cでは等価演算子の多重定義ができないので、スカラ型以外は find_if 関数を使うことになります。ここは、(等価演算子の多重定義に代わる方法を見つけるために)無理をして頑張るより、この方針の

  • LLVMではlibstdc++の代わりにlibc++を使うらしい - shikou jikken

    LLVM Replaces libstdc++ Library With libc++(Phoronix) LLVMはGCCの置き換えとしても期待されているのだが、使用するライブラリもGNUのlibstdc++から、BSDライセンスのlibc++に置き換わるようだ。C++0x対応も狙っているとのことだが、LLVMはBSDライセンスであり、ライブラリも同じライセンスでそろえられる、という側面が大きそう。現状ではMac OS X(i386/x86_64)のみでのサポートだが、遠くないうちにLinuxでもサポートされるそうだ。また、libc++の方が4倍以上高速というテスト結果もある模様。

    LLVMではlibstdc++の代わりにlibc++を使うらしい - shikou jikken
  • CSTL プロジェクト日本語トップページ - OSDN

    CSTLは、C言語で使えるC++のSTLライクなコンテナライブラリです。vector, deque, list, set, multiset, map, multimap, unordered_set, unordered_multiset, unordered_map, unordered_multimap, stringを提供します。

    CSTL プロジェクト日本語トップページ - OSDN
    tyru
    tyru 2010/04/19
    昔まったく同じアプローチのNSTL(Non-Standard Temporary Library)とか作ってた
  • NANの定義について - pyopyopyo - Linuxとかプログラミングの覚え書き -

    gcc環境だと math.h に NAN という定数が定義されている。ところが visual c++ (visual studio)には対応する定義が無い。 環境に依存しない、ポータブルな、移植性の高いコードが必要な場合は、STLを使って #include <limits> std::numeric_limits<float>::quiet_NaN(); std::numeric_limits<double>::quiet_NaN();と書けば良い。 なお quiet_NaN() の"quiet"はシグナルを発生させないという意味。浮動小数点関連の仕様を定めているIEEE 754は、2 種類の NaN を用意していて、 シグナルを発生するNAN (signaling nan) シグナルを発生しないNAN (quiet nan) して区別している。つまりシグナルハンドラから見て、五月蝿い(s

    NANの定義について - pyopyopyo - Linuxとかプログラミングの覚え書き -
  • STLのqueueとかstackとかが好きになるたった一つの方法 - 神様なんて信じない僕らのために

    全国1,000,000人のSTLファンのみなさんに朗報です。 STLのqueueとかstackとか使いにくくないですか? あれって、中身はlistとかqueueとかvectorのくせに使いにくくないですか? 触れるインターフェイスが少なすぎ、とか思ってないですか? 渡したコンテナを触れないときどうしてますか? 1.渡すコンテナを独自で作成し、インターフェイスは実装し中身は気合いでいじる できますが、queueやstackで渡されるコンテナは「コピー」なので相当醜いことになります。却下。 2.queueやstackをprotected継承してインターフェイスを拡張する 正解!! 移植性はないけど正解!! 移植性がないのはSTLには環境によって独自の実装があるからです。 しかし、多くの場合ちょっと書き換えるだけでこのテクニックが使えます。 これを使うと、 swapができるqueue(シュリンク

    STLのqueueとかstackとかが好きになるたった一つの方法 - 神様なんて信じない僕らのために
    tyru
    tyru 2009/11/06
  • 『イテレータを自作するには?』

    C++ フリーでぷろぐらみんぐ 逆引きリファレンス。 C++のやりたい事から引ける逆引きメモを書いています。 何かコメントなどいただけると嬉しいです! C++では、STLを使用すると特にイテレータが大活躍ですね(^^) 自分でイテレータを作成する必要にせまられることはないかと思います。 でも、独自のイテレータを作成するにはどうしたらよいかは興味深いと思います。 さて、ここでは、char*のイテレータを作成しようと思います。 あまり意味の無い試みです。 なぜなら、アルゴリズムの、copyやreverseなど様々な関数テンプレートはおそらくchar*の型をそのまま扱えるからです。 ま。遊びなので 【サンプル】 #include <cstdlib> #include <iostream> #include <iterator> #include <algorithm> #include <sst

    tyru
    tyru 2009/10/20
  • C++0x 標準コンテナのsize()の計算量を規定 - Faith and Brave - C++で遊ぼう

    標準コンテナのsize()メンバ関数の計算量を全てO(1)にしようという提案があり、 賛成多数で通ってしまったらしいです。 つまり、サイズ用のメンバ変数を持たずに実装されていたstd::listやstd::set等に サイズ用メンバ変数が新たに追加されることになります。 組み込み環境でSTL使ってるところがコンパイラをアップデートしてC++0xに対応すると メモリ不足で動かなくなる可能性があるのですが、そのへん考慮されているのだろうか。 以下、N2920の投票結果から 我々は、C++0X working paperにN2923 "Specifying the complexity of size() (Revision 1)"を適用する。 Crowlは、これによってABIが破壊的に変更されるかどうか尋ねた。 Hinnantは、実装に依存すると返答した。いくつかの実装は変わるだろう。 Bro

    C++0x 標準コンテナのsize()の計算量を規定 - Faith and Brave - C++で遊ぼう
    tyru
    tyru 2009/09/02
  • いやなブログ: STL のバインダとリファレンスへのリファレンス問題

    STL のバインダとリファレンスへのリファレンス問題 STL に含まれる bind1st と bind2nd は for_each や find などの関数と組み合わせて使うと便利です。しかしながら、リファレンス (参照) を引数に取る関数の引数をバインドすることはできないので注意が必要です。 注意が必要ですと言いつつ、自分がこの問題を知らずにはまりました。次のようなコードで問題は起きます。 #include <algorithm> #include <functional> #include <iostream> #include <string> #include <vector> using namespace std; void print(const string& s1, const string& s2) { cout << s1 << ": " << s2 << endl;

    tyru
    tyru 2009/07/09
    STLのbind1stとbind2ndは参照を引数に取る関数の引数をバインドすることはできない
  • STLport: Welcome!

    Welcome to STLport Consulting! The company was started back in 1997 by a small group of developers gathered around STLport Standard Library Project. Since then STLport has been accepted by the technical community as industry standard for multiplatform development. STLport library can be downloaded here at no charge. Complete first-hand product support is being rendered by the original developer cr

    tyru
    tyru 2009/06/20
    はてなキーワードより「フリーのSTL。標準STLより読みやすく、優れたマルチスレッドやデバッグ機能を備えている
  • stack

    stackとは スタックは末尾(または先頭)に限って要素の追加削除を行うことのできるデータ構造です。 末尾からしか要素を取り出せないので、 必然的に「後に入れたものから先に取り出さなくてなはならない」ということになります。 そのため、スタックはLIFO(last-in first-out)とも呼ばれます。 スタックに新しい要素を挿入することをpush、要素を取り出すことをpopといいます。 スタックは末尾への要素の挿入・削除ができるデータ構造なら何を使っても実装することができます。 普通は配列や単方向連結リストを用いて実装します。 STLにおけるstack STLのstackは何を使って実装するかをvector,deque,listの中から選べます。 スタックの要素の型をTとすると、

    stack
    tyru
    tyru 2009/06/19
    「STLのstackは何を使って実装するかをvector,deque,listの中から選べます。他にも、push_back, pop_back, back, sizeなどのメソッドを適当に定義ã
  • C++マニアック,mem_fun,mem_fun_ref,クラスのメンバ関数を呼び出すテンプレート関数

    C++マニアック mem_fun,mem_fun_ref,クラスのメンバ関数を呼び出すテンプレート関数 ページの末尾へ トップページへ mem_fun、mem_fun_ref、クラスのメンバ関数を呼び出すテンプレート関数 mem_fun、mem_fun_ref は、STL の functional の一つで、クラスのメンバ関数を呼び出すためのテンプレート関数です。functional とは、補助関数とでもいう意味でしょう。 mem_fun とは で、何をするものか mem_fun とは ページの先頭へ まず mem_fun とは、何をするものなのかを解説しましょう。次は、引数の無いメンバ関数 Func0 を持つクラスです。 class CThing { public: int Func0() { return printf("This is Func0\n"); }

    tyru
    tyru 2009/05/27
  • Standard Template Library プログラミング on the Web

    1985年、AT&TのBjarne StroustrupがC++をこの世に送り出しました。その後C++は様々な拡張を繰り返しながら進化してきました。 1991年、ISOはC++の国際標準(standard C++)を定める作業を開始しました。標準C++の最終草案は1997年にISO C++標準化委員会に承認されました。 標準C++が規定するのは言語仕様だけなく、C++標準ライブラリも規格の中で明確に定められています。それまでC++のライブラリといえばiostreamぐらいのものでしたし、それもあくまで"事実上の標準"でしかありませんでした。 そしてそのC++標準ライブラリの一部として組み入れられたのがSTL(Standard Template Library)です。すなわちSTLは標準C++の仕様の一部ということです。 僕がSTLを知ったのは1995年、いくつかのコンパイラがtemplat

    tyru
    tyru 2009/04/09
  • STL の string のリファレンスカウント - bkブログ

    STL の string のリファレンスカウント Effective STLによると、多くの STL の実装では string クラスの内部において、文字列のコピーを減らすために、リファレンスカウントが行われているそうです。そこで、手元の環境の string クラスでリファレンスカウントが実際に行われているか調べてみました。 結論としては、Debian GNU/Linux sarge + GCC 3.3.5 の環境では、リファレンスカウントが行われていました。次のコードをコンパイルして実行すると 2つの string オブジェクトの data() は同じアドレスを指している (つまり、メモリ上の同じ文字列を共有している) ことがわかります。 #include <stdio.h> #include <string> using namespace std; int main() { stri

    tyru
    tyru 2009/04/09
  • C++ の string と vector の reserve() の挙動 - bkブログ

    C++ の string と vector の reserve() の挙動 C++ の string と vector には前もって容量を確保するための reserve() というメンバ関数があります。何気なく使っていた関数ですが最近になって興味深い挙動に気づきました。 reserve() の基 string と vector の reserve() は前もって容量 (capacity) を確保しておくためのメンバ関数です。前もって容量を確保 (reserve) しておけば、データの追加時に発生する再割り当て (reallocation) を防ぐことができ、効率的です。 たとえば、何もしないで文字列に 1,000文字追加した場合、(内部的に倍々で容量を増やしていくため)10回程度の再割り当てが発生しますが、 s.reserve(1000) のように容量を確保しておけば 1回の割り当て (

    tyru
    tyru 2009/02/13
  • Submit Form

    Submit Form
    tyru
    tyru 2009/02/13
    STLリファレンス
  • サービス終了のお知らせ

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

    tyru
    tyru 2008/12/26
    auto_ptrが使えない場面 1. 配列を管理する場合 2. 一つのポインタに対して、所有権をもつauto_ptrは1つでなければならない(ãƒ
  • サービス終了のお知らせ

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