首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

C++返回vectorvector作为参数传递

C++里很多时候我们会遇到函数想返回两个以上结果情况,这时候可以用数组(vector)、类来作为容器返回,也可以声明一个全局变量数组,数值存放在数组里解决。...第一个方式是使用引用来解决,vector引用在函数间传递 这是一个例子,假设我要传入一个数,我函数功能是返回这个数后面十个数序列。...#include #include using namespace std; /* 输入一个数,返回这个数后面的十个数字序列 注意参数这个 & 符号不能省略 */ void getSequence...=sequence.end();it++){ cout<<*it< 第二个方式是返回vector变量 在被调用函数中声明一个vector变量,函数结束时候返回vector变量 但是这样传参方式我有一个不太理解地方...然后返回其实是指向堆空间vector指针

4.8K60
您找到你想要的搜索结果了吗?
是的
没有找到

c++系列之二 指向成员函数指针(烧脑)

,原文详细解释了C++指向成员函数指针,因为带有“教程”一词,所以比较通俗易懂。...如果对翻译君翻译质量有意见,建议前往 原地址 围观。 咦?还不走?那废话少说,我们开始了啊。 关于成员函数指针 成员函数指针C++最少用到语法之一,甚至有经验C++码农有时候也会被它搞晕。...我们可以一个指向派生类指针赋值给一个指向其基类指针(即"is-a"关系),而所谓“逆变性规则”(翻译君:不知道是啥,原文是contravariance rule)正是这种规则反面。...因为 “一个指向成员指针能在不同地址空间之间传递,只要二者使用对象布局一样” (此话来自C++老爸 Bjarne Stroustrup C++程序设计语言》 )。...p被作为 this 指针并当作参数传递给了函数。

2.8K20

C++ this指针:用于在成员函数中指向调用该函数对象

C++中this指针是一个指向当前对象指针。在成员函数中,可以使用this指针来访问调用该函数对象成员变量和成员函数。...在成员函数内,无需显式地传入this指针,编译器会自动当前对象地址赋给this指针。...二、作为返回值this指针 this指针可以作为返回值返回。这种情况下,返回指向调用该函数对象指针。为了实现这个功能,需要将返回类型设置为类引用或指针类型。...这里使用了*this来访问调用该函数对象。 三、作为函数参数this指针 this指针也可以作为函数参数传递。这种情况下,可以在函数内部访问其他对象成员变量和成员函数。...四、总结 this指针C++中是一个非常重要概念,可以用来访问调用该函数对象,作为返回值返回,或者作为函数参数传递。掌握this指针使用可以帮助我们更好地编写面向对象程序。

18240

每日一问:c++成员函数,能作为线程参数吗?

问:类成员函数可以传入线程参数吗? 回答: 如果c语言全局函数,可以。 如果是类静态成员函数,可以 如果是类普通成员函数,不可以 为什么?...《深入探索C++对象模型》中提到成员函数时,当成员函数不是静态,虚函数,那么我们有以下结论: (1) &类名::函数名 获取成员函数实际地址; (2) 对于函数x来讲obj.x()编译器转化后表现为...x(&obj),&obj作为this指针传入; (3) 无法通过强制类型转换在类成员函数指针与其外形几乎一样普通函数指针之间进行有效转换。...所以,要在回调函数中传入一个类普通成员函数时,this指针无处安放使得回调函数比较复杂。 怎么解决?...} public: bool startThread() {//启动子线程 typedef void* (*FUNC)(void*);//定义FUNC类型是一个指向函数指针

2.2K30

C++】STL 算法 ③ ( 函数对象中存储状态 | 函数对象作为参数传递时值传递问题 | for_each 算法 函数对象 参数是值传递 )

文章目录 一、函数对象中存储状态 1、函数对象中存储状态简介 2、示例分析 二、函数对象作为参数传递时值传递问题 1、for_each 算法 函数对象 参数是值传递 2、代码示例 - for_each...函数 函数对象 参数在外部不保留状态 3、代码示例 - for_each 函数 函数对象 返回值 一、函数对象中存储状态 1、函数对象中存储状态简介 在 C++ 语言中 , 函数对象 / 仿函数...二、函数对象作为参数传递时值传递问题 1、for_each 算法 函数对象 参数是值传递 下面开始分析 for_each 函数中 函数对象 作为参数 具体细节 ; for_each 算法调用代码如下..., 这个函数对象 保留了 内部 函数对象参数副本 状态值 ; 2、代码示例 - for_each 函数 函数对象 参数在外部不保留状态 如果 在 for_each 算法中 调用了 函数对象 , 函数对象中..., 传递 只是 函数对象副本 , 副本 状态改变 不会影响到外部函数 ; 如果想要 保留上述 状态改变 , 则需要使用 函数对象 接收 for_each 返回值 , 这个函数对象 保留了 内部 函数对象参数副本

14110

【Example】C++ 回调函数及 std::function 与 std::bind

回调函数是做为参数传递一种函数,在早期C样式编程当中,回调函数必须依赖函数指针来实现。...一,回调函数 回调函数创建步骤大概为: 1,声明一个函数指针类型。 2,拟写使用回调函数函数,函数指针类型及变量名声明作为参数传递。...3,拟写符合函数指针类型实现函数,实现函数指针作为参数传递给使用它函数。...当用作类成员函数绑定时,第一个参数仍然是作为成员可调用对象引用,第二个参数则是对象指针,而第三个参数开始对应可调用对象参数表。...: 1,调用指向非静态成员函数指针指向非静态数据成员指针时,首参数必须是引用或指针(可以包含智能指针,如 std::shared_ptr 与 std::unique_ptr),指向访问其成员对象。

4.2K30

C++】类封装 ② ( 封装最基本表层概念 | 类对象作为参数传递几种情况 )

m_r = r; } // 获取面积 double getS() { m_s = 3.14 * m_r * m_r; return m_s; } 3、代码分析 - 类对象作为参数传递几种情况...( 指针 / 引用 / 直接 ) 使用 类 对象 作为函数参数时 , 分别讨论下面三种情况 ; 第一种情况 : 使用 类对象 指针作为参数 , 传参时 , 传入必须是一个指针值 , 也就是地址值 ,...对象成员 , 需要使用 -> 符号调用 , 也就是访问指针内存空间成员方式 ; // 使用 类对象指针作为参数 void fun1(Circle* circle) { cout << "fun1...: 使用 类对象引用作为 参数 ; 传参时 , 可以直接 circle 对象传入 , 因为 C++ 编译器在编译引用时 , 会自动为 引用参数 添加 & 取地址 , 在函数内部访问时 , 会自动为引用添加...这种情况下 , 需要拷贝整个对象作为副本 , 函数调用效率很低 , 不建议使用这种方式 , 该调用方式与 引用 类型参数操作相同 , 推荐使用 引用类型参数 ; // 直接使用 类对象作为参数 void

22410

std::function与std::bind使用总结

C++中函数指针用途非常广泛,例如回调函数,接口类设计等,但函数指针始终不太灵活,它只能指向全局或静态函数,对于类成员函数、lambda表达式或其他可调用对象就无能为力了,因此,C++11推出了std...std::function vs 函数指针 C++函数指针相信大家用很多了,用法最广泛应该就是先定义函数指针类型,然后在声明一个函数指针变量作为另一个函数入参,以此作为回调函数,如下列代码所示...std::function可以说是函数指针超集,它除了可以指向全局和静态函数,还可以指向彷函数,lambda表达式,类成员函数,甚至函数签名不一致函数,可以说几乎所有可以调用对象都可以当做std:...,作为第一个参数,这就导致了类成员函数不能直接赋值给std::function,这时候我们就需要std::bind了,简言之,std::bind作用就是转换函数签名,缺少参数补上,多了参数去掉...b 匿名函数只捕获了a和b两个外部变量,其中a是按值传递,b是按引用传递 圆括号内是匿名函数所需要参数,也可以分为按值传递和按引用传递两种方式,某种意义上说,方括号中捕获外部变量其实也可以作为参数传入

10.7K92

《Effective C++》学习笔记

条款20:宁以传递const引用替换传递值 尽量用 常量引用类型 来作为函数参数类型,这通常比较高效,也可以解决基类参数类型被赋值子类时引起内容切割问题。...解决方案是将该乘法运算函数作为一个非成员函数,传两个参数进去,这样不管你int放在前面还是后面,都能作为参数被转换类型了。...用tr1::function成员变量替换虚函数,从而允许包括函数指针在内任何可调用物搭配一个兼容于需求签名式。 虚函数也做成另一个继承体系类,然后在调用其类中添加一个指针指向其对象。...条款45:运用成员函数模板接受所有兼容类型 真实指针允许父类指针指向子类对象,如果想要让自制智能指针也支持这种对象转换,那就需要特殊操作,因为一般模板类(智能指针指向多种对象,必然是模板类)只能以自身模板声明类型来构造...做法是声明一个泛化构造函数,也就是定义一个模板构造函数,接收模板参数,声明一个指向真实对象指针,声明一个获取该对象指针get函数,用该get函数放在初始化列表中来构造模板类。

1.1K20

《逆袭进大厂》之C++篇49问49答

等为0,bool为FALSE,指针为NULL等等,即.bss段内容 全局对象初始化,在main之前调用构造函数,这是可能会执行前一些代码 main函数参数argc,argv等传递给main函数,...,而引用在初始化之后不可再改变 sizeof指针得到是本指针大小,sizeof引用得到是引用所指向变量大小 当把指针作为参数进行传递时,也是实参一个拷贝传递给形参,两者指向地址相同,但不是同一个变量...引用一旦初始化之后就不可以再改变(变量可以被引用为多次,但引用只能作为一个变量引用);指针变量可以重新指向别的变量。 不存在指向空值引用,必须有具体实体;但是存在指向空值指针。...相比于C语言,C++提供了一些新机制保障类型安全: 操作符new返回指针类型严格与对象匹配,而不是void* C中很多以void*为参数函数可以改写为C++模板函数,而模板是支持类型检查; 引入...而内联函数可以进行参数类型检查(编译时),且具有返回值。 内联函数本身是函数,强调函数特性,具有重载等功能。 内联函数可以作为某个类成员函数,这样可以使用类保护成员和私有成员,进而提升效率。

1.9K10

《逆袭进大厂》之C++篇49问49答(绝对干货)

等为0,bool为FALSE,指针为NULL等等,即.bss段内容 全局对象初始化,在main之前调用构造函数,这是可能会执行前一些代码 main函数参数argc,argv等传递给main函数,...,而引用在初始化之后不可再改变 sizeof指针得到是本指针大小,sizeof引用得到是引用所指向变量大小 当把指针作为参数进行传递时,也是实参一个拷贝传递给形参,两者指向地址相同,但不是同一个变量...引用一旦初始化之后就不可以再改变(变量可以被引用为多次,但引用只能作为一个变量引用);指针变量可以重新指向别的变量。 不存在指向空值引用,必须有具体实体;但是存在指向空值指针。...相比于C语言,C++提供了一些新机制保障类型安全: 操作符new返回指针类型严格与对象匹配,而不是void* C中很多以void*为参数函数可以改写为C++模板函数,而模板是支持类型检查; 引入...而内联函数可以进行参数类型检查(编译时),且具有返回值。 内联函数本身是函数,强调函数特性,具有重载等功能。 内联函数可以作为某个类成员函数,这样可以使用类保护成员和私有成员,进而提升效率。

2.5K40

《逆袭进大厂》第三弹之C++提高篇79问79答

函数指针还允许函数作为变元传递给其他函数; 5) 两种方法赋值: 指针名 = 函数名; 指针名 = &函数名 114、 内存泄漏后果?如何监测?解决方法?...当在类非静态成员函数访问类非静态成员时,编译器会自动将对象地址传给作为隐含参数传递给函数,这个隐含参数就是this指针。...166、引用作为函数参数有哪些好处? 1) 传递引用给函数与传递指针效果是一样。...具体来说,就是表达式中数组元素引用转换为指针加偏移量引用。 4) 在向函数传递参数时候,如果实参是一个数组,那用于接受形参为对应指针。...如果你把函数指针(地址)作为参数传递给另一个函数,当这个指针被用为调用它所指向函数时,我们就说这是回调函数; 4) 因为可以把调用者与被调用者分开。

2.2K30

《Effective C++》读书摘要

三、const const返回值:避免(a*b)=c错误; const参数传递指向常量引用; const成员函数:允许const属性重载。 四、对象使用前初始化 构造函数成员初始化列表; ?...十七、独立成句new对象放入智能指针 new对象转换为智能指针作为参数,可能会被编译器结合其他参数调整顺序,造成内存泄漏。...二十、常引用参数代替值传递 前者高效,但是对于内置类型除外。 二十一、需要返回对象时候不要返回引用 栈、堆、静态对象都不要作为引用返回。...三十七、绝不定义继承默认参数值 重载虚函数默认参数来自于基类; 默认参数函数声明为普通成员函数,调用私有的虚函数即可。...可以根据iterator_traits提供类别标签区分迭代器类型,类别标签是空结构体类型,标签作为函数参数,可以保证编译器能在编译时期对类型进行检查。 ?

1.9K60

C++面向对象程序设计_Part1

函数重载 构造函数位置 参数传递 返回值传递 友元 操作符重载(一),this, cout 操作符重载(二)非成员函数,无this,临时对象 Big Three ---string class begin...参数传递 ? 参数传递分为两种:pass-by-value和pass-by-reference 一条非常考验你是否受过良好c++训练就是看你是不是用pass-by-reference。...(引用本质上就是指针,主要用在参数传递和返回值传递) 友元 ? 友元函数是类朋友,被设定为友元函数可以访问朋友私有成员,这个函数(do assignment plus)用来做复数加法具体实现。...上面介绍__doapl函数将在操作符重载中进行调用,可以看到第一个参数是this,对于成员函数来说,都有一个隐藏参数,那就是this,this是一个指针指向调用这个函数对象,而操作符重载一定是作用在左边对象...但string类不一样,上面的图是很好例子,因为使用是动态分配内存,对象a和对象b都指向外面的一块内存,如果直接使用默认拷贝构造或者拷贝赋值(例如b = a),则是b指针指向a所指区域,也就是

91420

后台开发:核心技术与应用实践 -- C++

当数组名作为参数传入时,实际上数组已经退化为指针了,它功能是返回字符串长度。 sizeof()是运算符,而不是一个函数,在编译时就计算好了,用于计算数据空间字节数。...使用引用传递函数参数时,在内存中并没有产生实参副本,而是对实参直接操作。...当使用一般变盘传递函数参数时,当函数发生调用,需要给形参分配存储单元,形参变量是实参变量副本;如果传递是对象,还将调用拷贝构造函数。...因此,当参数传递数据较大时,用引用比用 一般变量传递参数效率更高,所占空间更少。...派生类构造函数必须要以合适初值作为参数,隐含调用基类和新增对象成员构造函数,来初始化它们各自数据成员,然后再加入新语句对新增普通数据成员进行初始化。

1.3K10

模板

模板 模板提供参数化类型,即能够类型名作为参数传递给接收方来建立类或函数。...不能将模板 成员函数放在独⽴实现⽂件中(以前,C++标准确实提供了关键字 export,让您能够模板成员函数放在独⽴实现⽂件中,但⽀持该关 键字编译器不多;C++11不再这样使⽤关键字export...Q Bye 深入探讨模板类: 可以内置类型或类对象⽤作类模板Stack类型。指针可以 吗? 例如,可以使⽤char指针替换程序清单14.14中string对象吗?...不正确使用指针栈 切忌盲目使用模板 正确使用指针栈 方法: - 让调⽤程序提供⼀个指针数组,其中每个指针指向不同字符串。...- Pair是另⼀个完全不同名称。 默认类型模板参数 模板具体化: 成员模板模板用作参数模板类和友元: 模板别名:

3K20

ReactNative4 Android源码分析二:《JNI智能指针之实现篇》

而对于一个C++类而言,对象size就是所有非static成员变量size之和(需考虑内存对齐),这就约束了wrapper class作为子类不能额外声明任何非static成员变量,才能与根父类JObjectBase...另,javaobject是指向_javaobject指针,jobject是指向_jobject指针。...为什么智能指针模板参数能够接受多种类型? 在上章例子中,local_ref\与local_ref\传递了不同模板参数,从语法上看区别很大,但在内部实现时,都会进行类型萃取。...通过这样机制,两个类型彼此打通,故无论传递何种模板参数,智能指针都能正确存储对应类型wrapper class。 模板参数起到作用是什么?...从上可以了解到,智能指针模板参数用来获取存储wrapper class类型。

1.3K20

: std::function

在C/C++中函数指针作为一种回调机制被广泛使用,但是函数指针C++面向对象编程中有些不足,比如无法捕捉上下文。举个例子,使用对象非静态成员函数作为函数指针就无法做到。...当然上述问题也不是没有解决方法,通过C++模板(template)就可以,std::sort实现就使用了模板,不论使用函数、仿函数还是lambda函数实现排序算法,均可以传给std::sort。...std::function可以用于保存并调用任何可调用东西,比如函数、lambda函数、std::bind表达式、仿函数,甚至是指向对象成员指针。...下面的示例演示了函数指针、lambda函数和std::bind表达式传递给std::function: int add(int a, int b) { return (a + b); } int sub...,而且没有模板带来头文件膨胀问题,非常适合取代函数指针

2.2K30
领券