在 C++ 中对向量使用函数
Using functions on vectors in C++
我正在尝试使用函数更改矢量元素内的数据。碰巧元素在函数内部发生了变化。如何将更改保留在函数之外?我必须使用指针吗?
代码:
#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
但是它是空的。
您正在按值将矢量发送到populate
。这会创建一个副本,因此 pop
是 vec
的副本。您所做的更改只会影响 pop
。
你需要引用向量
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;
}
}
您尝试做的事情可以通过标准图书馆设施轻松地、惯用地完成:
int size = 3;
std::vector<int> vec(size);
std::iota(vec.begin(), vec.end(), 0); // include algorithm for this
我正在尝试使用函数更改矢量元素内的数据。碰巧元素在函数内部发生了变化。如何将更改保留在函数之外?我必须使用指针吗?
代码:
#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
但是它是空的。
您正在按值将矢量发送到populate
。这会创建一个副本,因此 pop
是 vec
的副本。您所做的更改只会影响 pop
。
你需要引用向量
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;
}
}
您尝试做的事情可以通过标准图书馆设施轻松地、惯用地完成:
int size = 3;
std::vector<int> vec(size);
std::iota(vec.begin(), vec.end(), 0); // include algorithm for this