zoukankan      html  css  js  c++  java
  • 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

    新战场:https://blog.csdn.net/Stephen___Qin
  • 相关阅读:
    二分+RMQ/双端队列/尺取法 HDOJ 5289 Assignment
    思维题 HDOJ 5288 OO’s Sequence
    树形DP Codeforces Round #135 (Div. 2) D. Choosing Capital for Treeland
    最大流增广路(KM算法) HDOJ 1853 Cyclic Tour
    最大流增广路(KM算法) HDOJ 1533 Going Home
    最大流增广路(KM算法) HDOJ 2255 奔小康赚大钱
    Complete the Word CodeForces
    Gadgets for dollars and pounds CodeForces
    Vasya and Basketball CodeForces
    Carries SCU
  • 原文地址:https://www.cnblogs.com/Stephen-Qin/p/9078058.html
Copyright © 2011-2022 走看看