在实际的操作中,我们经常会碰到需要返回一序列字符串或者一列数字的时候,以前会用到数组来保存这列的字符串或者数字,现在我们可以用vector来保存这些数据。但是当数据量很大的时候使用vector效率就比较低了,还有千万别返回引用(局部对象的),因为函数执行完毕后,会释放局部对象的内存。一般要将vector作为返回值的话,我们可以这样来实现,我们将它放入函数参数中,添加引用,作为保存数据的容器。例子:
原始的:
vector<int> fun1(int num);
更好的处理方法:
bool fun1(int num, vector<int> &vec);
这里将函数的返回值设为bool型,还是将数据保存在vec中,使用的是它的引用。
上面的两种方法可以达到相同的效果,但是建议使用第二种方法。
vector作为函数返回类型的完整例子:
#include <vector> #include <iostream> using namespace std; vector<int> fun1(int num) { vector<int> values; for(int j=0;j<num;j++) { values.push_back(j); } return values; } int main() { vector<int> myvector; int i; cout<<"Please input a number:"<<endl; cin>>i; myvector=fun1(i); cout<<endl; for(int m=0;m<myvector.size();m++) { cout<<myvector[m]<<endl; } return 0; }
相关的论述:
vector可以像普通变量那样在函数体内声明后返回:返回的是临时对象 只能复制 不能返回他的引用和迭代器
如果vector 里存的不是基本类型, 而是自定义类型的话,最好重写这个类的拷贝构造函数
vector的底层数据结构是数组,当你用返回对象的方法返回vector时,vector会进行整个数组的拷贝,如果数组较大,那么效率是很低的。
所以,如果你要返回的vector是在函数内部new的,那么可以返回该vector的指针,这样的话你必须注意该vector的释放问题。
另外,由于vector的存储空间位置可能在插入、删除的时候变化,所以要小心迭代器的失效等问题。
Vector的元素类型有要求的,必须要能够支持赋值运算和对象必须可以复制。这是最低要求,还有可能部分元素类型的部分操作不支持。