vector作为函数返回类型

时间:2022-12-14 09:21:27

在实际的操作中,我们经常会碰到需要返回一序列字符串或者一列数字的时候,以前会用到数组来保存这列的字符串或者数字,现在我们可以用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=;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=;m<myvector.size();m++)
{
cout<<myvector[m]<<endl;
}
return ;
}

相关的论述:

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&sol;c&plus;&plus;&colon; c&plus;&plus;函数返回类型什么情况带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&plus;&plus;11&colon; 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基础知识&lpar;5&rpar;:指针--传递指针给函数&amp&semi;返回指针的函数

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

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

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

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

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

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

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

随机推荐

  1. LeetCode之136&period; Single Number

    -------------------------------------- 一个数异或它自己会得到0,0异或n会得到n,所以可以用异或来消除重复项. AC代码如下: public class Sol ...

  2. ASP&period;ENT Core Linux 下 为 donet创建守护进程(转载)

    原文地址:http://www.cnblogs.com/savorboard/p/dotnetcore-supervisor.html 前言 在上篇文章中介绍了如何在 Docker 容器中部署我们的 ...

  3. 循环初练 for

    class Program    {        static void Main(string[] args)        {            while (true)           ...

  4. USB键盘数据解析

    以前用过的一个嵌入式设备使用USB键盘作为输入.当时还研究了一下USB协议,现在都快忘得差不多了.这里整理一下当时找到的关于USB键盘数据方面的资料. 主机与USB键盘建立连接后,定时从键盘获取8字节 ...

  5. vlan划分

    1.vlan:虚拟局域网: 作用:划分广播域,抑制广播风暴: 2.vlan技术的优点: 有效控制广播域范围: 增强局域网的安全性: 灵活构建虚拟工作组: 3.vlan划分的方式: 基于端口: 基于MA ...

  6. VS中的调试相关的技巧

    1. 可以设置断点的命中条件:

  7. dateframe&lowbar;loc&period;iloc&period;ix

    import pandas as pddf=pd.DataFrame({ "a":[1,2,3], "b":[4,5,6], "c":[7, ...

  8. ConfigParser&period;NoSectionError&colon; No section&colon; &&num;39&semi;MongoDB&&num;39&semi;

    场景:手动执行bat文件正常,schtasks定时执行bat文件时报错. 原因:定时执行时,ini配置文件找不到.Windows 下用 schtasks 定时执行脚本的默认起始路径为:C:\Windo ...

  9. Oracle E-Business Suite并发处理机制(Current Processing)

    2012年写过一篇关于Oracle E-Business Suite并发管理器的文章,回头看之前总结的内容还是比较单薄,很多点没说到,最近在看这块的内容,索性再写一篇稍微完整的文章来. Oracle ...

  10. Java中子类对象赋值给父类变量

    1. 在Java中将一个字类对象赋值给父类变量是合法的,这也是实现多态(即方法的动态分派)的前提条件之一. 2. 在Java中父类赋值同样也适用于数组.可以将一个子类数组赋值给一个父类数组变量.但可能 ...