該当規格: 20.3.1 Operators [operators], N3225 http://sites.google.com/site/cpprefjp/reference/utility/rel_ops さて、それでは早速、具体的なライブラリに移っていこうと思います。 とはいえ、初回から飛ばすのもアレなので、まずは軽いものを、 というわけで、 の rel_ops を紹介したいと思います。 これは比較演算子の多重定義を助けるためのヘルパ関数群で、 で唯一、 C++98/03 から全く変化していないライブラリです。 定義 namespace std { namespace rel_ops { template <class T> bool operator!=( const T& x, const T& y ) { return !( x == y ); } template <cla
(このコンテンツはメールマガジンの STL & iostream 入門に手を加えたものです。「 STL と iostream が使えるかのチェック」等はメールマガジンの方のページをご覧ください) STL は主に次の5つから構成されています。アルゴリズム、関数オブジェクト、イテレーター、コンテナ、サポートクラスです。この中で最も重要なのが「アルゴリズム」です。他の4つはアルゴリズムのためにある、と言っても過言ではありません。というわけで、 STL の中でもまずこのアルゴリズムから見ていくことにします。 「アルゴリズム」という言葉は、一般的に「特定の結果を求めるための処理方法」という意味で使われています。たとえば「配列上のデータをソートする」などがアルゴリズムの一例です。 STL のアルゴリズムは、基本的に「別物」と考えた方が分かりやすいと思います。使いこなせるようになれば「ああ、アルゴリズム
C++AdventCalendarの記事です。 さて、 生配列使ってますか? tr1::array(boost::array) 使ってますか? 生配列使っていると答えた貴方、 →まず死ね。 はい、arrayが常識ですよね。 さて、とはいえ、 「テンプレートを使うと遅いしコードがでかいし」 「生配列が一番速いしコードが小さいし」 「なのでテンプレート禁止」 なんて話を聞くこともあるかと思いますが、 こういう事をいう人は大抵「テンプレートを書いたことがない」のに言ってます。 なぜか? こういう人が本当に心配しているのは「テンプレートが肥大化すること」じゃないのです。 「テンプレートが書けないし読めないのを認めたくないからです」 多くはCの老害だからですが、そういう人は放っておいてC++な人はきちんとテンプレートを使いましょう。 だって多くのテンプレートのコードは大きくもなければ非効率でもないか
pair は STL のヘッダ <utility> で定義されている、二つの要素のペアを入れる入れ物です。 二つの要素 first と second の呪縛から逃れる 二つの要素 ページの先頭へ pair は二つの要素を入れる入れ物です。それぞれの要素は C++ のオブジェクトで、その型はテンプレート引数で決まります。簡単な例を見て見ましょう。この場合、int と float がテンプレート引数です。 #include <utility> using namespace std; int main() { pair<int, float> pairif; pairif.first = 1; pairif.second = 2.3f; } pair は基本的には、次のように定義された struct PAIR に良く似ています。 struct PAIR { int first; float s
目的 この記事は、C++0xのlambdaを完全に解説せんとする目的を以て書かれた。サンプルコードは最小に留め、エラー処理等は省いた。この記事さえ読めば、今日からlambdaを恐れることなく使う本物のC++0xプログラマになれるだろう。 lambdaとは何ぞや lambdaである。あるものは、lambda関数、あるいは無名関数という名称を使っている。いったいlambdaとは何なのか。 lambdaは関数である。また、特に名前はない。したがって、lambda関数、無名関数と呼ぶのは、間違ってはいない。しかしここでは、単にlambdaと呼ぶことにする。 lambdaを定義しよう lambdaは関数オブジェクトである。lambdaは関数オブジェクトである。これはとても大事なので二度書いた。lambdaは関数オブジェクト以外の何物でもない。ところが不思議なことに、皆lambdaが単なる関数オブジェ
注意 gcc version 4.3.2 の std::string 私的まとめ 実装 クラス std::basic_string::_Rep は以下の情報を持つ 文字列長 _M_length 確保された容量 _M_capacity 参照カウンタ _M_refcount アロケータ(std::basic_string::_Alloc)の派生クラス(std::basic_string::_Alloc_hider)が文字列へのポインタをメンバとして持つ(_M_p) アロケータは空のクラスであることが多く、そのための 1byte の容量を節約するため(empty base optimization) std::basic_string のメンバは std::basic_string::_Alloc_hider のインスタンス _M_dataplus だけ つまり、 sizeof(std::str
STLのページに戻る STL Algorithm 詳解 Index 今のところリファレンスに毛が生えた程度ですが。 ところどころ(1/4くらい)例が抜けていたりします(あまり面白い例が思いつかなくて)。 '99 9/26 集合、最大・最小、順列、コピー追加。これでとりあえずalgorithmは全部。あとは例や相互参照リンクを付け加えていくだけ。 2000年10月16日 いろいろと修正 目次 検索を行うアルゴリズム 検索アルゴリズム一覧 ある値を持つ要素を検索する。- find() 条件を満たす要素を検索する。- find_if() 同じ値が連続している箇所を探す。- adjacent_find() ある複数の要素いずれかと一致する要素を検索する。- find_first_of() ある複数の要素いずれかに対して条件を満たす要素を検索する。- find_first_of() 一番最後に見
STLport のハッシュ・コンテナ 標準C++ライブラリが提供するコンテナは、vector, list, deque, set, multiset, map, multimap の7種です。 これらコンテナから特定の要素を検索するとき、その時間計算量は vector, list, deque では O(N), set, multiset, map, multimap では O(logN) となります。 これ以上に高速な検索が可能なコンテナとしてハッシュ表(hashtable)を利用すれば、適切なハッシュ関数を与えることによって検索に要する時間計算量をコンテナ内の要素数に関わらず O(1) に近づけることができますが、残念ながら標準C++ライブラリにはハッシュ表で実装されたコンテナ(ハッシュ・コンテナ)を提供していません。 SGI(Silicon Graphics社)のSTL実装をベースに
角のページへ戻る STL(Standard Template Library) C++の標準テンプレートライブラリ、STLのページです。 2003/6/7 コンテナ全ページ標準に合わせて修正 目次(と予定) 更新履歴 はじめに STLとは? '99 11/07 作成 その前にC++で知っておかなければならないこと 馴染みがない(かもしれない)単語 '99 9/23 わずかに修正 テンプレート(template<>) 2001 1/31 更新 環境 '99 2/20 VCでSGI_STLを使う、BeOS、egcs等 使い方 イテレータ(反復子)の使い方 '99 6/19 更新 関数オブジェクトの使い方 '99 7/4 mem_fun()の使い方追加 早見表 STLで使う主なクラス '99 6/13 各クラスの説明、ヘッダをまとめた STLで使われる名前 '99 6/13 微妙に更
さすがに参った。 - http://forums.devshed.com/c-programming-42/tip-about-stl-hash-map-and-string-55093.html ふつーにデフォルトではstringのhash関数は提供してないんだ。へー。 #ところで上の説明、stdにhash関数を無理やりぶち込むのはOKなんか? 肩越しに悲劇を見ていたところでは氏はこんなことをやってたな #include #include #include int main() { __gnu_cxx::hash_set > s; s.insert("test"); return 0; } g++ (GCC) 4.1.3 20070812 (prerelease) (Debian 4.1.2-15) 追加で何のパッケージ入れればいいのかは知らん。"ext/"とかついてるし__gnu_cx
このドメインは お名前.com から取得されました。 お名前.com は GMOインターネットグループ(株) が運営する国内シェアNo.1のドメイン登録サービスです。 ※表示価格は、全て税込です。 ※サービス品質維持のため、一時的に対象となる料金へ一定割合の「サービス維持調整費」を加算させていただきます。
2003/6/7 細かな修正 mapとは? キーと要素のペア(pair)を格納するコンテナ。 検索/比較はキーによって行います。 mapとmultimap multimapはキーが重複していても構わないため、operator[]()がありません。 multimapを使用する場合はmapをmultimapと読み替えてご覧下さい。 目次 テンプレート 型名 コンストラクタ等 map() operator =() イテレータ begin(), end() rbegin(), rend() サイズ size(), max_size(), empty() 挿入 map::insert() multimap::insert() insert() 削除 erase() 検索 find() count() equal_range() lower_bound(), upper_bound() map::o
(このコンテンツはメールマガジンの STL & iostream 入門に手を加えたものです。「 STL と iostream が使えるかのチェック」等はメールマガジンの方のページをご覧ください) 今回はコンテナクラスの std::set と std::multiset を紹介します。 このふたつのクラスと、次次回紹介する std::map と std::multimap はこれまでのコンテナクラスとは値の格納方法が違います。この4つのクラスは「2分木」という方法で値を格納します。また、 std::set, std::multiset, std::map, std::multimap の4つのコンテナクラスを「連想コンテナ」と呼びます。 std::vector などは「1列に並んだデータ」をイメージするものでした。 std::set などは「2分木」という規則に則ってデータを格納します。これ
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く