如果我使用默认分配器创建一个std :: vector,如下所示:
vector<int> myVec = vector<int>();
myVec.push_back(3);
myVec.push_back(5);
myVec.push_back(8);
然后向量是否将实际数据内部存储到int数组中?是否有可能获得一个指向这个数组的指针,并使用这个指针直接迭代它?
答案 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); }
因此,我们可以说项目存储为常规数组,您可以直接访问它们
<强>被修改强>