在实际的操作中,我们经常会碰到需要返回一序列字符串或者一列数字的时候,以前会用到数组来保存这列的字符串或者数字,现在我们可以用vector来保存这些数据。但是当数据量很大的时候使用vector效率就比较低了,还有千万别返回引用(局部对象的),因为函数执行完毕后,会释放局部对象的内存。一般要将vector作为返回值的话,我们可以这样来实现,我们将它放入函数参数中,添加引用,作为保存数据的容器。例子:

原始的:

  1. vector<int> fun1(int num);

更好的处理方法:

  1. bool fun1(int num, vector<int> &vec);

这里将函数的返回值设为bool型,还是将数据保存在vec中,使用的是它的引用。

上面的两种方法可以达到相同的效果,但是建议使用第二种方法。

vector作为函数返回类型的完整例子:

  1. #include <vector>
  2. #include <iostream>
  3. using namespace std;
  4.  
  5. vector<int> fun1(int num)
  6. {
  7. vector<int> values;
  8. for(int j=;j<num;j++)
  9. {
  10. values.push_back(j);
  11. }
  12. return values;
  13. }
  14.  
  15. int main()
  16. {
  17. vector<int> myvector;
  18. int i;
  19. cout<<"Please input a number:"<<endl;
  20. cin>>i;
  21. myvector=fun1(i);
  22. cout<<endl;
  23. for(int m=;m<myvector.size();m++)
  24. {
  25. cout<<myvector[m]<<endl;
  26. }
  27. return ;
  28. }

相关的论述:

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

vector作为函数返回类型的更多相关文章

  1. c/c++: c++函数返回类型什么情况带const

    c++ 函数的返回类型,包括const 什么时候起作用呢? 函数返回值不想其立即修改的. 例子如下,这是一个简单的避免产生隐形返回变量的方法,abc 的函数返回是引用,main函数中第10行,++ 操 ...

  2. MSSQLSERVER数据库- 字符串分割函数返回类型表

    遇到这样一个问题,存储在数据库的数据是一串字符串如:1,2,3,4,5,6.想把这串字符串进行转变成一个表格,如下: 1 2 3 4 5 6 就是这样一个问题,有人同事,写了一个这样的封装函数,这样就 ...

  3. Flask04 后台获取请求数据、视图函数返回类型、前台接受响应数据

    1 后台获取请求数据 1.1 提出问题 前台发送请求的方式有哪些 后台如何获取这些请求的参数 1.2 前台发送请求的方式 GET.POST.AJAX 点睛:如果不指定请求方式,浏览器默认使用GET请求 ...

  4. vector作为函数返回值

    在实际的操作中,我们经常会碰到需要返回一序列字符串或者一列数字的时候,以前会用到数组来保存这列的字符串或者数字,现在我们可以用vector来保存这些数据.但是当数据量很大的时候使用vector效率就比 ...

  5. c++11: trailing return type in functions(函数返回类型后置)

    In C++03, the return type of a function template cannot be generalized if the return type relies on ...

  6. C基础知识(5):指针--传递指针给函数&返回指针的函数

    下面从3个代码例子分别讲述以下2个知识点: (1) 传递指针给函数(参数类型为指针) (2) 返回指针的函数(返回类型为指针) #include <stdio.h> // 传递指针给函数& ...

  7. Entity Framework 6 Recipes 2nd Edition(11-5)译 -> 从”模型定义”函数返回一个匿名类型

    11-5. 从”模型定义”函数返回一个匿名类型 问题 想创建一个返回一个匿名类型的”模型定义”函数 解决方案 假设已有游客(Visitor) 预订(reservation)房间(hotel ) 的模型 ...

  8. C/C++函数调用的几种方式及函数名修饰规则以及c++为什么不允许重载仅返回类型不同的函数

    我们知道,调用函数时,计算机常用栈来存放函数执行需要的参数,由于栈的空间大小是有限的,在windows下栈是向低地址扩展的数据结构,是一块连续的内存区域.这句话的意思是栈顶的地址和栈的最大容量是系统预 ...

  9. C++11用于计算函数对象返回类型的统一方法

    [C++11用于计算函数对象返回类型的统一方法] 模板 std::result_of 被TR1 引进且被 C++11 所采纳,可允许我们决定和使用一个仿函数其回返值的类别.底下,CalculusVer ...

随机推荐

  1. ruby读取源代码自身的一种方法

    我们知道ruby中如果源代码中一行开头(必须在行的开头)有__END__标示,则表示下面的都是数据行,可以用IO对象DATA来访问这些行.但是如果我们用DATA.rewind一下的话,就可以将文件流指 ...

  2. Apache Kafka简介与安装(一)

    介绍 Kafka是一个分布式的.可分区的.可复制的消息系统.它提供了普通消息系统的功能,但具有自己独特的设计. 首先让我们看几个基本的消息系统术语: Kafka将消息以topic为单位进行归纳. 将向 ...

  3. 赋给个人账户sudo的全部root执行权限

    sudo visudo 输入root账户密码后,会自动打开sudoers文件编辑 在root     ALL=(ALL)    ALL此行下增加一行 user ALL=(ALL)    NOPASSW ...

  4. 如何让DIV中的文字垂直居中

    var h = $("div").innerHeight(); $("#text").css("font-size", h); $(&quo ...

  5. Spring Cloud入门教程 - Zuul实现API网关和请求过滤

    简介 Zuul是Spring Cloud提供的api网关和过滤组件,它提供如下功能: 认证 过滤 压力测试 Canary测试 动态路由 服务迁移 负载均衡 安全 静态请求处理 动态流量管理 在本教程中 ...

  6. redis主从,哨兵回忆手册

    redis主从 持久化的开启与主从集群是否生效无关系 Slave Server同样是以非阻塞的方式完成数据同步.在同步期间,如果有客户端提交查询请求,Redis则返回同步之前的数据(注意初次同步则会阻 ...

  7. jquery.js

    /*! jQuery v1.10.2 | (c) 2005, 2013 jQuery Foundation, Inc. | jquery.org/license //@ sourceMappingUR ...

  8. Android的颜色值转换

    Android的颜色int值比较变态,是个负值,用计算机术语讲叫补码,手工转换比较麻烦,首先看看文档 https://developer.android.com/reference/android/g ...

  9. 在WinForm应用程序中快速实现多语言的处理

    在国际化环境下,越来越多的程序需要做多语言版本,以适应各种业务需求的变化.在Winform应用程序中实现多语言也有常规的处理方式处理,不过需要针对每个语言版本,重新修改Winform界面的显示,对一些 ...

  10. Ubuntu 下命令安装 Java

    1. 使用 java -version 查看系统是否存在 jdk. 2. ubuntu使用的是openjdk,所以我们需要先找到合适的jdk版本.在命令行中输入命令:apt-cache search ...