std :: vector是否始终包含顺序存储器地址中的数据为array [number]?
答案 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];
堆栈上的是一个数组。 分配内存和数组的指针恰好分享语义。它们不符合标准,所以不要混淆两者。