欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2022-03-22 13:41:41
...

一、大致以下类型

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

分别对应

其对应的调用分别是:
1. deal( vec );
2. deal( &vec );
3. deal( &vec );
4. deal( vec );
5. deal( vec );


二、注意

如果需要在函数中对vector容器中数据调换顺序等操作需要是引用传递

例如

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

这样如果不把obj地址放进去则会无法改变顺序,这个C中的swap现象是一样的

正确如下

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

尽量都用引用传递


三、代码实例值传递问题

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

//输出:1 。//vector1是无法给容器obj1添加元素的,因为这里采用的是值传递,形参的改变无法影响到实参obj1,而且实参给形参赋值的时候会调用vector的拷贝构造函数浪费资源。


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


C++(笔记)容器(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++;  
     }  
 }