【发布时间】:2015-12-17 05:51:50
【问题描述】:
我有两个关于向量的问题。
-
假设我有一个多维向量如下:-
vector< vector<int> > A;那么
A[0]、A[1]等就是向量。向量是如何存储在A中的?一世 表示关于向量A[0]和A[1]的哪些信息存储在A中? 并且会重新分配各个向量的内存,例如A[2]导致A的重新分配? 其次,我尝试查看向量的地址如何随着重新分配而变化。我使用了以下代码:-
代码:
vector<int> A;
int* x ;
int* y ;
vector<int>* ad;
vector<int>* bd;
for(int i = 0 ; i < 10000; i++){
A.push_back(i);
if(i == 2){
y = &A[0];
ad = &A;
}
x = &A[0];
bd = &A;
}
我发现A 的地址并没有改变,即使A[0] 的地址发生了变化。这是意料之中的,因为向量通过使用new 和delete 在后台工作。但我的问题是有多少关于向量的信息(或哪些信息)存储在地址&A 中(考虑到&A 的地址没有变化)。这也是我对第一个问题的疑问。
我试图更好地理解向量在默认情况下是如何工作的。
【问题讨论】:
-
这很简单:
std::vector<X>包含X对象,无论X的类型如何(std::vector<bool>可能例外。) -
What is stored in A类型为vector<int>的元素,当然,看到A的类型是vector<vector<int>>(而不是vector<T*>对于某些类型T)。I suspect that it stores the pointers你怀疑的依据是什么? -
STL 与 c++ 标准库不同。
-
how much information ... is stored in the address &A当然,只有足够的信息来定位A的内存表示。对于任何对象的地址都是如此。 -
我根据您@Igor 的评论对原始问题进行了一些更改。
标签: c++ vector dynamic-memory-allocation