首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >std::std向量::向量邻接性

std::std向量::向量邻接性
EN

Stack Overflow用户
提问于 2012-06-05 13:14:52
回答 4查看 12.1K关注 0票数 31

我知道std::vector<T>在内部连续地存储数据(除非是std::vector<bool>),无论是旧的C++03标准还是新的C++11

处理这个问题并引用标准:回答回答的问题非常好。

嵌套向量std::vector <std::vector <T> >中的数据如何?那是怎么储存的?

如果每个内部向量都需要连续地存储它的数据,那么&v[n] == &v[0] + n for all 0 <= n < v.size()怎么可能是真的。

要说这一点略有不同,是否有可能“简单地”和顺序地(通过指针或类似的)访问存储在这种嵌套结构中的所有元素,就像对一维向量一样?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-06-05 13:19:48

不是的。vector的元素存储在动态分配的内存块中;否则,vector的容量无法增加。vector对象只保存指向该块的指针。

按顺序存储元素的要求仅适用于元素本身,而不适用于这些元素的任何动态分配成员。

票数 34
EN

Stack Overflow用户

发布于 2012-06-05 13:21:10

回答你的最后一个问题:不。向量向量的元素不是连续存储的。

考虑以下代码:

代码语言:javascript
复制
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'?

票数 8
EN

Stack Overflow用户

发布于 2012-06-05 13:20:56

std::vector< std::vector<T> >是一个对象向量,它们存储在内存的连续块中。然而,这些对象也是向量这一事实与此无关。

虽然向量的元素存储在内存的连续块中,但元素所在的内存并不是向量对象本身的一部分。

“是否能够”简单地“按顺序(通过指针或类似方式)访问存储在这种嵌套结构中的所有元素,就像对一维向量一样?”

对于访问std::vector的元素,最好使用operator[]at()方法,而不是检索第一个元素的地址和指针算法。对于表示为向量向量的多维数组,我建议您继续使用operator[],它既易于使用,也易于阅读:myVector[i][j]。也值得一看向量::at vs. .向量::operator[] :)

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10898007

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档