C++(笔记)容器(vector)作为函数参数如何传参

一、大致以下类型

  1. void 函数名( vector< int> obj );
  1. void 函数名( vector< int>* pobj );
  2. void 函数名( const vector< int>* pobj ); // 在函数内不能改变 pobj 指向的对象 ,//调用时不会调用拷贝构造函数
  3. void 函数名( vector< int>& obj );
  4. void 函数名( const vector< int>& obj ); // 在函数内不能改变 obj 对象,// 在函数调用时调用了vector的拷贝构造函数

分别对应

其对应的调用分别是:

  1. deal( vec );
  2. deal( &vec );
  3. deal( &vec );
  4. deal( vec );
  5. 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++;  
     }  
 }  
评论 16
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值