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
  • 相关阅读:
    第十五次-语法制导的语义翻译
    第十四次--算符优先分析
    第十二次-递归下降语法分析
    第十一次-LL(1)文法的判断,递归下降分析程序
    第十次-消除左递归
    第九次-DFA最小化,语法分析初步
    个人作业——软件工程实践总结作业
    【评分】Alpha阶段
    K 班前7次作业成绩汇总
    【评分】第七次作业--项目需求分析(团队)
  • 原文地址:https://www.cnblogs.com/Stephen-Qin/p/9078058.html
Copyright © 2011-2022 走看看