C++(笔记)容器(vector)作为函数参数如何传参
Posted 浅然言而信
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++(笔记)容器(vector)作为函数参数如何传参相关的知识,希望对你有一定的参考价值。
一、大致以下类型
- void 函数名( vector< int> obj );
- void 函数名( vector< int>* pobj );
- void 函数名( const vector< int>* pobj ); // 在函数内不能改变 pobj 指向的对象 ,//调用时不会调用拷贝构造函数
- void 函数名( vector< int>& obj );
- void 函数名( const vector< int>& obj ); // 在函数内不能改变 obj 对象,// 在函数调用时调用了vector的拷贝构造函数
分别对应
其对应的调用分别是:
- deal( vec );
- deal( &vec );
- deal( &vec );
- deal( vec );
- deal( vec );
二、注意
如果需要在函数中对vector容器中数据调换顺序等操作需要是引用传递
例如
这样如果不把obj地址放进去则会无法改变顺序,这个C中的swap现象是一样的
正确如下
尽量都用引用传递
三、代码实例值传递问题
//输出:1 。//vector1是无法给容器obj1添加元素的,因为这里采用的是值传递,形参的改变无法影响到实参obj1,而且实参给形参赋值的时候会调用vector的拷贝构造函数浪费资源。
![这里写图片描述](https://img-blog.csdnimg.cn/img_convert/f8e3377d25b067d4de9cb161e9135926.png)
//输出:1,0,1,2,3,4,5,6,7,8,9, // vector2和vector3是可以给容器obj1添加元素的,他们分别采用的引用传递和指针传递,在函数内部形参发生改变时,这种改变可以直接“传递”给被调用的实参
四、函数实现初始化容器&输出容器所有数据(使用迭代器)
/*初始化容器*/
void init_vector(vector <int> &obj)
for(int i=0;i<10;i++)
//push_back()方法在vector的末尾附加元素
obj.push_back(i);
/* 显示容器中的所有数据*/
void show_vector(vector <int> &obj)
vector<int>::iterator it = obj.begin();
//使用迭代器//it 是一个地址
while(it<obj.end())
cout<<*it<<endl;
it++;
以上是关于C++(笔记)容器(vector)作为函数参数如何传参的主要内容,如果未能解决你的问题,请参考以下文章