调整嵌套的std :: vectors的大小

时间:2013-05-31 20:46:38

标签: c++ memory stl openmp

如果我有:

std::vector<std::vector<double> > vec

假设我为每个vec [0],vec [1],... vec [vec.size() - 1]分配空间。

如果我打电话:

vec[3].resize(100)

是否有可能在vec[3]之前或之后分配的向量会被重新定位?

我问的原因是我有一个嵌套的向量,如上面的openmp部分所示。每个线程控制vec[threadnum]。这些线程有一些调整大小。我想知道一个线程是否有可能调整vec[thread]的大小,这会导致其他线程被转移。

1 个答案:

答案 0 :(得分:4)

执行向量的调整大小(或调用任何其他方法)时,不会修改其他向量。

实际上,当您调用对象的方法时,其他不相关的对象不会更改其状态。

如果我们想象所有向量将它们的数据存储在共同的连续内存块中,那么我们这里有向量向量的事实可能会令人困惑。但事实并非如此。每个向量都有自己的内存区域,每个向量可以独立重新分配内存(“父”向量根本不知道重定位)。