在C ++中使用向量函数

时间:2015-02-27 16:59:01

标签: c++ function pointers vector

我试图通过使用函数来更改向量元素中的数据。恰好在函数内部更改了元素。如何将这些变化保留在功能之外?我必须使用指针吗?

代码:

#include <iostream>
#include <vector>

using namespace std;

void populate( int size_, vector<int> pop)
{
    //Set the vector's size and populate the vector
    pop.resize(size_);
    for(int i = 0; i<3 ; i++)
    {
        pop[i] = i;
    }
}

int main()
{
    vector<int> vec;
    int size = 3;
    populate(size, vec);

    for(vector<int>::iterator it = vec.begin(); it != vec.end(); ++it)
    {
        cout << *it << endl;
    }   
}

cout的输出应为:0 1 2 但它是空的。

3 个答案:

答案 0 :(得分:3)

您尝试做的事情很容易通过标准图书馆设施完成:

int size = 3;
std::vector<int> vec(size);
std::iota(vec.begin(), vec.end(), 0);  // include algorithm for this

答案 1 :(得分:2)

您需要通过引用获取向量

void populate( int size_, vector<int>& pop)

否则,您传入向量的副本,填充它,然后返回,但原始向量未经修改。

或者@juanchopanza推荐,因为这个功能的唯一目的是为你制作这个载体,它可能是

vector<int> populate( int size_ )
{
    vector<int> temp(size_);
    for(int i = 0; i < size_ ; i++)
    {
        pop[i] = i;
    }
    return temp;
}

然后

int main()
{
    int size = 3;
    vector<int> vec = populate(size, vec);
    for(vector<int>::iterator it = vec.begin(); it != vec.end(); ++it)
    {
        cout << *it << endl;
    }   
}

答案 2 :(得分:0)

您要通过值将向量发送到populate 。这会创建一个副本,因此popvec的副本。您所做的更改仅会影响pop