是std :: vector与array [number]相同吗?

时间:2010-06-20 00:29:36

标签: c++ stl vector

  

可能重复:
  Are std::vector elements guaranteed to be contiguous?

std :: vector是否始终包含顺序存储器地址中的数据为array [number]?

5 个答案:

答案 0 :(得分:6)

对于除bool之外的所有类型,标准要求元素在内存中是连续的:

  

23.2.4 / 1 ...向量的元素是连续存储的,这意味着如果v是一个向量,其中T是某种类型而不是bool,那么它就服从身份& v [n] ==& ; v [0] + n对于所有0< = n< v.size()

请记住,std::vector<bool>有特殊要求,与bool数组不同。

答案 1 :(得分:5)

是。给出:

std::vector<int> arr;

你可以肯定

&arr[0]

将为您提供指向可以(例如)传递旧API的连续数组的指针。

答案 2 :(得分:1)

是。但是,它不会在堆栈上分配。

答案 3 :(得分:0)

是的,向量使用顺序存储器存储所有元素。这意味着随机访问几乎与普通数组的索引一样快。

但是vector会在堆中而不是堆栈中分配内存。因此,在某些情况下效率可能会降低。

答案 4 :(得分:0)

使用标准分配器时,可以确保在使用std :: vector时分配的内存是连续的。换句话说,foo [n + 1]是foo [n]之后的序列中的下一个元素。但是std :: vector是而不是一个数组,就像

一样
int* blah = new int[100];

不是数组。但

int blah[100];
堆栈上的

是一个数组。 分配内存和数组的指针恰好分享语义。它们不符合标准,所以不要混淆两者。