std vector +默认分配器+直接阵列访问?

时间:2009-11-20 02:18:53

标签: c++ arrays vector

如果我使用默认分配器创建一个std :: vector,如下所示:

vector<int> myVec = vector<int>();
myVec.push_back(3);
myVec.push_back(5);
myVec.push_back(8);

然后向量是否将实际数据内部存储到int数组中?是否有可能获得一个指向这个数组的指针,并使用这个指针直接迭代它?

2 个答案:

答案 0 :(得分:4)

是的,vector设计为可以执行此操作,使用&myVec[0]获取int*。您还可以使用vector的迭代器类型,其行为类似。 (指针是有效的随机访问迭代器。)您使用默认分配器或任何其他分配器不会改变任何此类,它是向量接口的必需部分。

向量是guaranteed以使用连续存储。特别是从那些结果中,检查Stroustrup自己的this one

答案 1 :(得分:0)

对于gcc 4.4,此运算符定义为:

operator[](size_type __n)
{ return *(this->_M_impl._M_start + __n); }

因此,我们可以说项目存储为常规数组,您可以直接访问它们

<强>被修改