我正在尝试编写一个将接收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);
}
答案 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)
____________________________^_____________________