• 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
  • 相关阅读:
    CCNP路由实验(4) -- BGP
    CCNP路由实验(3) -- 路由控制
    CCNP路由实验(2) -- OSPF
    什么是依赖注入
    java中接口的定义与实现
    火炬之光模型导出(Unity载入火炬之光的模型)
    【创新培育项目】为什么要组队參加比赛?及如何寻找一个合适的选题?
    oracle中schema指的是什么?
    介绍自己上架的第一个游戏
    unity 打包资源及网络请求资源包
  • 原文地址:https://www.cnblogs.com/Stephen-Qin/p/9078058.html
Copyright © 2020-2023  润新知