まぢほすぃーとかよく思ったもんだ。
http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2017/p0563r0.pdfというものが某C++に詳しいサイトから引用されていたので、ふむふむする。
そうか、 push_front
と pop_front
はダークスペルなのかwww
まぁ、そういや std::vector
は連続メモリ領域に確保して配列との互換性をーみたいな実装要件があったような気がするので、先頭操作をする場合に後ろをシフトせんとならんからまぢ非効率ってわけなんだね。
And accessing data that is scattered around the heap is much, much slower than accessing data that is contiguous.
ってことで、ヒープ上に点々としている空間的に不連続なデータにアクセスするのはたまったもんじゃないし、比較的少量のデータならメモリ内の場所のシフトは今や高速なんでデータの局所性を大事にしたいよってことみたいね。
どうでもいいことだがパラグラフの記号 ¶
が用いられて新鮮。
いつの日か std::vector
にも push_front
と pop_front
がやってきてくれるのだろうか。
—————・・・
c++ - Are std::vector elements guaranteed to be contiguous? - Stack Overflowにドラフト n2798
の頃から記載があるよって書いてあった。
GitHub - cplusplus/draft: C++ standards draftsにドラフトがあるようだけど*1自分でビルドするのが面倒臭いので、ISO/IEC JTC1/SC22/WG21 - The C++ Standards Committee - ISOCPPから n3797
を回収する。 23.3.6 Class template vector
に記述がある。
The elements of a vector are stored contiguously