C++11標準ライブラリで新しく追加されたstd::forward_list
シーケンスコンテナは、要素数を返すsize
メンバ関数を提供しない。(空判定のempty
メンバ関数は提供される。)
#include <forward_list> std::forward_list<int> fl = /*...*/; size_t n = fl.size(); // NG: ill-formed // OK: 計算量O(n)で要素数を計算 #include <iterator> size_t n = std::distance(fl.begin(), fl.end());
C++11(N3337) 23.3.4.1/p2より該当箇所を引用。
A
forward_list
satisfies all of the requirements of a container (Table 96), except that thesize()
member function is not provided. (snip)
forward_list導入の提案文書N2543では、“O(N) のsize実装” や “O(1) のsize実装” と比較したうえで、“sizeを提供しない” 設計を選択している。唯一size
の計算量が線形時間 O(n) であったstd::list
コンテナも、C++11標準ライブラリでは定数時間 O(1) 保証に変更されたことで、全ての標準コンテナでsize
計算量が定数時間 O(1) となったことが背景にある。
関連URL