C++(笔记)容器(vector)作为函数参数如何传参
程序员文章站
2022-03-22 13:41:41
...
一、大致以下类型
- 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的拷贝构造函数
分别对应
其对应的调用分别是:
1. deal( vec );
2. deal( &vec );
3. deal( &vec );
4. deal( vec );
5. deal( vec );
二、注意
如果需要在函数中对vector容器中数据调换顺序等操作需要是引用传递
例如
这样如果不把obj地址放进去则会无法改变顺序,这个C中的swap现象是一样的
正确如下
尽量都用引用传递
三、代码实例值传递问题
//输出:1 。//vector1是无法给容器obj1添加元素的,因为这里采用的是值传递,形参的改变无法影响到实参obj1,而且实参给形参赋值的时候会调用vector的拷贝构造函数浪费资源。
//输出: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++;
}
}
下一篇: Nginx抢购限流配置实现解析