2010-12-13 85 views
15

有人可以给我一个如何为向量分配内存的例子吗?我需要几条线。 我有一个发生在20〜30个元素的向量..但是当我尝试清点,并编译它,我只得到了第一对夫妇的条目..为一个向量分配内存

+2

你有任何代码,你能说明什么?你的问题的最后一行真的让我困惑 – Default 2010-12-13 10:15:49

+2

是的,这听起来像你在你的代码中犯了一个错误。你可能不应该手动保留空间 – Oystein 2010-12-13 10:27:06

回答

38

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. 
+1

来完成这篇文章,'resize()'添加使用默认构造函数构造的元素(即,如果类型是'Elem',然后'Elem()') – swegi 2010-12-13 11:08:17

+1

@swegi,默认,是的。 'resize()'也可以接受第二个参数,它将被复制到所有新元素中。 – 2010-12-13 11:14:14

+1

但是,如果您只是使用'.push_back()',您是否必须重新分配/调整大小? – Charles 2015-12-10 14:29:04

7

看看this 您使用list.reserve (N);

Vector处理它的内存,你根本不需要使用reserve()。如果您已经知道向量列表需要多大,它才会真正提高性能。

例如:

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;