2D矢量与1D矢量

let*_*ite 1 c++ stl vector c++11

在C++ 11中,2D矢量在时间方面如何对抗1D向量?
在给定的2D矢量中,所有内部矢量具有相同的大小.

例如:

std::vector<std::vector<int>> X{10, std::vector<int>(4)};
Run Code Online (Sandbox Code Playgroud)

VS

std::vector<int> Y(40);
Run Code Online (Sandbox Code Playgroud)

当随机访问元素时,矢量的哪个化身会表现得更好?

Jac*_*ack 5

单个std::vector本质上更简单,它只是存储在某处的连续内存块.

std::vectorstd::vector有更多的额外开销,但它也更强大的(因为每个内载体可以是不同的尺寸,例如).

随机访问性能应根据您的特定使用模式进行彻底基准测试,但主要区别在于:

  • 使用单个向量,您只需计算size_t index = x + y*WIDTH并访问该元素
  • 使用嵌套向量,您有两个间接级别,首先必须获取包含内部向量的内存,然后必须获取内部向量数据的内存.