pen*_*ope 18 c++ vector stdvector
我知道std::vector<T>内部存储它的数据(除非它是std::vector<bool>)旧C++03标准和新标准C++11.
很好的stackoverflow问题处理这个并引用标准:答案,答案.
嵌套向量中的数据怎么样std::vector <std::vector <T> >?怎么存储?
如果每个内部向量都需要连续存储它的数据,那么它怎么可能是真的&v[n] == &v[0] + n for all 0 <= n < v.size().
要说这个略有不同,是否可以"简单地"和顺序地(通过指针或类似)访问存储在这种嵌套结构中的所有元素,就像对一维矢量所做的那样?
Ern*_*ill 21
否.a的元素vector存储在动态分配的内存块中; 否则,能力vector无法增加.该vector对象只保存指向该块的指针.
元素按顺序存储的要求仅适用于元素本身,而不适用于这些元素的任何动态分配成员.
std::vector< std::vector<T> >是一个对象的向量,存储在连续的内存块中.事实上,这些对象也是向量,但这无关紧要.
尽管向量的元素存储在连续的内存块中,但元素所在的内存不是向量对象本身的一部分.
"是否可以"简单地"和顺序地(通过指针或类似物)访问存储在这种嵌套结构中的所有元素,就像对一维矢量一样?"
对于访问元素std::vector,最好使用operator[]或at()方法而不是检索第一个元素的地址并使用指针算法.对于表示为向量向量的多维数组,我建议你继续使用operator[],这也易于使用且易于阅读:myVector[i][j].值得看看 vector :: at vs. vector :: operator []以及:)
回答你的最后一个问题:不.矢量矢量的元素不是连续存储的.
请考虑以下代码:
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);
Run Code Online (Sandbox Code Playgroud)
如果它们都是连续存储的,那么这将导致vv [2],vv [3]等中的每个元素移动.这可能会如何工作,因为你只是影响单个向量'v'?
| 归档时间: |
|
| 查看次数: |
7920 次 |
| 最近记录: |