gpt4 book ai didi

c++ - 如何让 C++ vector 变大?

转载 作者:行者123 更新时间:2023-11-28 03:27:19 27 4
gpt4 key购买 nike

我正在使用以下内容:

vector < vector < unsigned int > > paths;

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

我在每次迭代中调用它:

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

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

最佳答案

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

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

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

如果您想知道一个 vector 在您的架构中可以容纳的最大元素数,请调用 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 的最大大小,如果 vector 是 vector< vector< unsigned int > >相反,我得到 357,913,941。

关于c++ - 如何让 C++ vector 变大?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13574236/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com