0

我正在使用以下内容:

vector < vector < unsigned int > > paths;

但似乎我只能在那里添加 647 278 行。我每行有 10 个数字。

我在每次迭代中调用它:

paths.resize(paths.size() + 1, vector < unsigned int >(10));

有没有比每次迭代都调用它更好的方法?我是否总是必须给出列数,因为它没有改变?

4

2 回答 2

1

正如 pyCthon 指出的那样,this other question解释了这size_t是用于此处大小的正确类型,因为它保证足够大以允许您的体系结构达到最大值。

其次,该.resize()方法并不需要每次都调用。而是构造新向量并将.push_back(newvec)其添加到向量中。内部分配器将分配它认为合适的空间,并且通常是那里的最佳选择 - 它通常需要 O(log n) 重新分配,这在这里很重要;如果向量必须重新分配因为它需要更多空间,您最终可能会不断地将整个数组重新复制到新的内存块中。

更好的是,如果你能在一开始就计算出数组的总大小,那就这样做吧。这样,如果您调用 ,则在开始时只会有 1 个分配.reserve(size),然后.push_back()用于每个元素,因为它将在开始时分配整个块。

如果您想知道一个向量可以在您的架构中使用的最大元素数,请调用 vector::max_size()。来自 cplusplus.com 的示例:

// comparing size, capacity and max_size
#include <iostream>
#include <vector>
using namespace std;

int main ()
{
  vector<int> myvector;
  cout << "max_size: " << myvector.max_size() << "\n";
  return 0;
}

在 ideone.com 上运行它很快就得到了 1,073,741,823 的最大大小,如果向量是 a vector< vector< unsigned int > >,我得到 357,913,941。

于 2012-11-26T22:36:02.863 回答
1

不确定,但在这个std::vector 描述 中指出向量存储在内存中的一个连续位置。这意味着向量存储在您内存中的一大块中。

您是否尝试将其拆分为不同的向量(大数组)?

于 2012-11-26T22:36:16.610 回答