2013-10-19 24 views
-1

我是C++的新手,并试图理解向量。我的目标是更新方法的载体:如何更新方法中的向量

#include <vector> 
#include <iostream> 

using namespace std; 

void test(vector<int>& array){ 
    for(int i=0;i<10;i++){ 
     array.push_back(i); 
    } 
} 

int main(){ 
    // some integer value 
    vector<int> array(10); 

    test(array); 

    for(int i=0;i<array.size();++i) 
     cout<<array.at(i)<<endl; 

    cout<<"array size:"<<array.size()<<endl; 
    return 0; 
} 

输出:

0 
0 
0 
0 
0 
0 
0 
0 
0 
0 
0 
1 
2 
3 
4 
5 
6 
7 
8 
9 
array size:20 

我还没弄明白为什么10个零先加矢量?

+1

看一个参考。这就是构造函数的作用,然后你更多地推动。 – chris

+0

[第二构造函数](http://en.cppreference.com/w/cpp/container/vector/vector) – P0W

回答

1
std::vector<int> array(10); 

这会在阵列中创建10个开放插槽。在您的test1方法中,push_back将写入这10个时隙的

您必须要么使用[i]at(i)用于索引选择,或删除尺寸:

std::vector<int> array; 
+0

我意识到为什么,thx – gurpinars

1
vector<int> array(10); 

声明一个vector<int>有10个元素,个个都价值0,那么以后你push_back其他值。根据你的意思,你应该使用一个空载体:

vector<int> array; 

然后像你一样添加元素。

0

因为vector<int> array(10);预定义前10个元素为0的。使用:

vector<int> array; 
array.reserve(10); 

改为。

0

达到你想要的,你应该取代的push_back例如用于下标运算符是什么

void test(vector<int> &array) 
{ 
    for (std::vector<int>::size_type i=0; i < array.size() ; i++) 
    { 
     array[i] = i; 
    } 
} 

Another way is to use standard algorithm std::iota 

void test(vector<int> &array) 
{ 
    std::iota(array.begin(), array.end(), 0); 
} 

或者,如果你的编译器支持的std :: initializer_list你可以定义你的主要方式如下阵列,而不调用功能测试

std::vector<int> array = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };