发布于 2012-06-05 13:19:48
不是的。vector的元素存储在动态分配的内存块中;否则,vector的容量无法增加。vector对象只保存指向该块的指针。
按顺序存储元素的要求仅适用于元素本身,而不适用于这些元素的任何动态分配成员。
发布于 2012-06-05 13:21:10
回答你的最后一个问题:不。向量向量的元素不是连续存储的。
考虑以下代码:
std::vector<std::vector<int> > vv;
.... fill in v[0], v[1], v[2], etc
std::vector <int> & v = vv[1];
v.push_back (23);如果它们都是连续存储的,那么这将导致vv2、vv3等中的每个元素移动。这怎么可能,因为你只是影响一个向量'v'?
发布于 2012-06-05 13:20:56
std::vector< std::vector<T> >是一个对象向量,它们存储在内存的连续块中。然而,这些对象也是向量这一事实与此无关。
虽然向量的元素存储在内存的连续块中,但元素所在的内存并不是向量对象本身的一部分。
“是否能够”简单地“按顺序(通过指针或类似方式)访问存储在这种嵌套结构中的所有元素,就像对一维向量一样?”?
对于访问std::vector的元素,最好使用operator[]或at()方法,而不是检索第一个元素的地址和指针算法。对于表示为向量向量的多维数组,我建议您继续使用operator[],它既易于使用,也易于阅读:myVector[i][j]。也值得一看向量::at vs. .向量::operator[] :)
https://stackoverflow.com/questions/10898007
复制相似问题