らんだむな記憶

blogというものを体験してみようか!的なー

push_frontとpop_front

まぢほすぃーとかよく思ったもんだ。
http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2017/p0563r0.pdfというものが某C++に詳しいサイトから引用されていたので、ふむふむする。
そうか、 push_frontpop_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_frontpop_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

*1:そうか... githubで管理されているか... まぁそうか...