如何编写一个函数来填充文件中的向量

时间:2016-12-13 11:39:05

标签: c++ c++11

我正在尝试编写一个将接收std::vector的函数,然后文件名将文件中的每个整数写入向量。我编写了一个简单的void函数,我已经使用调试器进行了测试,它工作正常但是当我从main函数调用它时它返回空std::vector

    #include<iostream>
    #include<vector>
    #include<fstream>
    #include<string>
    using namespace std;

    void fill_vector(vector<int> v, string file_name) 
    {
        ifstream ifs(file_name);
        int n;
        while (ifs >> n)
            v.push_back(n);
    }

    int main()
    {
        vector<int> vec;
        string s = "integers.txt";
        fill_vector(vec, s);
    }

4 个答案:

答案 0 :(得分:4)

那是因为fill_vector按值获取了它的向量参数。它会复制您传入的向量,然后填充该向量,这不是您想要的,因为该副本将在函数末尾丢失。您希望实际矢量发生变化。

这是通过将矢量作为参考传递来完成的,将函数签名更改为(注意&符号&):

void fill_vector(vector<int>& v, string file_name) 

答案 1 :(得分:1)

作为通过非const引用传递向量的替代方法,您可以让fill_vector按值返回向量。 In C++11 this is as efficient as passing a non-const reference.

vector<int> fill_vector(string file_name) 
{
  ifstream ifs(file_name);
  if(!ifs.open())
    return {0};
  vector<int> vec;     
  int n;
  while (ifs >> n)
    vec.push_back(n);
  return vec;
}

答案 2 :(得分:0)

void fill_vector(vector<int>& v, string file_name)
//                          ^ you forgot this

答案 3 :(得分:0)

如果要在函数内编辑它,则应通过引用传递矢量:

void fill_vector(vector<int>& v, string file_name)
____________________________^_____________________