読者です 読者をやめる 読者になる 読者になる

C++0x 標準コンテナのsize()の計算量を規定

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は、実装に依存すると返答した。いくつかの実装は変わるだろう。
Brownは、これが乱数ライブラリに影響するという懸念を示した。
Talbotは、それが影響することを確認した。
Vandevoordeは、C++0xが他の方法によってもABIを壊すかどうか尋ねた。
Hinnantは、参照カウントがもはやstringに許されないので、それがABIを破壊すると答えた。
Talbotは、N2923によって壊される既知の唯一の実装がGCCであると報告した。
Stroustrupは、空リストのサイズを増加させるかどうか尋ねた。
Plaugerは、それが増加させることを確認した。しかし、空リストのサイズに敏感なプログラマはいま、forward_listを使用することができるので、それは受理可能であると考えられた。

std::listにサイズ変数が増えて困るひとはstd::forward_listに書き直せ、と。
んー、これで納得するんだろうか。



N2909 Specifying the complexity of size()

LWG issue 632. Time complexity of size() for std::set

C++0xの言語拡張まとめ