vector作為函數返回類型


在實際的操作中,我們經常會碰到需要返回一序列字符串或者一列數字的時候,以前會用到數組來保存這列的字符串或者數字,現在我們可以用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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM