在實際的操作中,我們經常會碰到需要返回一序列字符串或者一列數字的時候,以前會用到數組來保存這列的字符串或者數字,現在我們可以用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的元素類型有要求的,必須要能夠支持賦值運算和對象必須可以復制。這是最低要求,還有可能部分元素類型的部分操作不支持。
參考文獻:
1.vector作為函數返回值:https://www.cnblogs.com/pengjun-shanghai/p/4913409.html
2.討論一下vector做函數返回值容易出的問題 :https://bbs.csdn.net/topics/220069961