ホームページ  >  記事  >  バックエンド開発  >  stl のサイズの落とし穴

stl のサイズの落とし穴

高洛峰
高洛峰オリジナル
2016-11-22 15:12:391427ブラウズ

私が昨年入社したとき、会社の基本ライブラリにはLRUCacheがあり、内部の実装はstd::listを使っていました。ただし、std::list を計算する関数は、stl の size() メソッドを直接使用します。その結果、ストレステスト中、パフォーマンスはここで行き詰まりました。
今日、同僚が基本ライブラリで別のキュー実装を発見しました。これも要素数を取得するときに std::list メソッドが使用されていました。
残念ながら、同社の基本ライブラリはヘッダーファイルのみを公開しており、このピットが他の場所に存在するかどうかを一つ一つ確認することは不可能です。

stl の size() メソッドの実装を見てみましょう:

size_type    
  size() const
      { return std::distance(begin(), end()); }

上記のコードの g++ バージョンは 4.2.1 です

明らかに、複雑さは O(N) です。リストに多くの要素がある場合、計算は非常に遅くなります。 したがって、std::list を使用するときは、自分でカウントを維持することを忘れないでください。


声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。