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

Posted 浅然言而信

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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++;  
       
   

以上是关于C++(笔记)容器(vector)作为函数参数如何传参的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 std::vector 作为 C# 的参数调用非托管 C++ 函数?

C++中STL学习笔记——容器之vector

C++中STL学习笔记——容器之vector

c++中vector的作用是啥?

C++提高笔记(二:容器和常用算法部分)

如何将向量的一部分作为函数参数传递?