-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 个零添加向量?

4

4 回答 4

1
vector<int> array(10);

这声明了一个vector<int>包含 10 个元素的 a,它们都具有 value 0,然后是push_back其他值。根据你的意思,你应该使用一个空向量:

vector<int> array;

然后像你一样添加元素。

于 2013-10-19T15:50:04.667 回答
1
std::vector<int> array(10);

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

您需要使用[i]at(i)进行索引选择,或删除大小:

std::vector<int> array;
于 2013-10-19T15:50:15.177 回答
0

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

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

反而。

于 2013-10-19T15:50:29.050 回答
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 您可以通过以下方式在 main 中定义您的数组,而无需调用函数 test

std::vector<int> array = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
于 2013-10-19T16:02:07.050 回答