为向量分配内存

28

有人能给我举一个为向量分配内存的例子吗?几行就足够了。 我有一个容纳20-30个元素的向量..但是当我尝试使用cout并编译它时,我只得到了前几个条目。

可以使用以下代码为向量分配内存: ``` std::vector vec; vec.reserve(30); // 分配30个int类型的元素空间 ``` 使用`reserve()`函数预留空间可以避免在向量中添加元素时频繁地重新分配内存,并提高了性能。

3
你有任何可以展示的代码吗?你问题中的最后一行真的让我感到困惑。 - default
2
是的,听起来你在代码中犯了一个错误。你可能不需要手动预留空间。 - user1481860
2个回答

85

std::vector 管理其自身的内存。你可以使用 reserve()resize() 方法来分配足够的内存以容纳给定数量的项:

std::vector<int> vec1;
vec1.reserve(30);  // Allocate space for 30 items, but vec1 is still empty.

std::vector<int> vec2;
vec2.resize(30);  // Allocate space for 30 items, and vec2 now contains 30 items.

7
为了完成这篇文章,resize() 函数会添加使用默认构造函数构造的元素(例如,如果类型是 Elem,则添加的是 Elem())。 - swegi
1
@swegi,默认情况下是的。resize()函数还可以接受第二个参数,该参数将被复制到所有新元素中。 - Frédéric Hamidi
1
但是,如果你只是使用.push_back(),你需要重新分配/调整大小吗? - Charles
1
如果您知道将有多少项,且该数量不是很小,则最好分配足够的空间。 - Zbyszek
5
在C++11中,您只需要在构造函数中传递计数即可:std::vector<int>(1000) - Shital Shah

9

请看这里

使用list.reserve(n);

Vector会自动管理内存,你不需要使用reserve()。只有当你已经知道vector列表需要多大时,它才真正起到性能优化的作用。

例如:

std::vector<int> v;
v.reserve(110); // Not required, but improves initial loading performance

// Fill it with data
for(int n=0;n < 100; n++)
    v.push_back(n);

// Display the data
std::vector<int>::iterator it;
for(it = v.begin(); it != v.end(); ++it)
    cout << *it;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接