博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C++中vector作为参数的三种传参方式
阅读量:4303 次
发布时间:2019-05-27

本文共 1025 字,大约阅读时间需要 3 分钟。

此文章转载自:http://www.cnblogs.com/xiaoxi666/p/6843211.html

c++中常用的vector容器作为参数时,有三种传参方式,分别如下(为说明问题,用二维vector):

 

  • function1(std::vector<std::vector<int> > vec),传值
  • function2(std::vector<std::vector<int> >& vec),传引用
  • function3(std::vector<std::vector<int> >* vec),传指针

 

注意,三种方式分别有对应的const形式,不在此讨论。

三种方式对应的调用形式分别为:

  • function1(vec),传入值
  • function2(vec),传入引用
  • function3(&vec),传入地址

三种方式的效果分别为:

  • 会发生拷贝构造
  • 不会发生拷贝构造
  • 不会发生拷贝构造

验证程序:

复制代码

1 #include 
2 #include
3 4 using namespace std; 5 6 void function1(std::vector
> vec) 7 { 8 cout<<"-----------------------------------------"<
>& vec) 34 { 35 cout<<"-----------------------------------------"<
> *vec) 62 { 63 cout<<"-----------------------------------------"<
> v(2,std::vector
(3,0)); 93 for(int i=0;i<2;i++) 94 { 95 for(int j=0;j<3;j++) 96 v[i][j]=i+j; 97 } 98 99 //打印v的地址100 cout<<"&v:"<<&v<

复制代码

 

输出(为便于观察,简单处理了一下效果):

 

简而言之,vector的内部存储模型是这个样子(以main()函数中的v为例):

 关于12个字节的问题,请参考博客

你可能感兴趣的文章
docker容器秒死的解决办法
查看>>
管理网&业务网的一些笔记
查看>>
openstack报错解决一
查看>>
openstack报错解决二
查看>>
linux source命令
查看>>
openstack报错解决三
查看>>
乙未年年终总结
查看>>
子网掩码
查看>>
第一天上班没精神
查看>>
启动eclipse报错:Failed to load the JNI shared library
查看>>
eclipse安装插件的两种方式在线和离线
查看>>
linux下源的相关笔记(suse)
查看>>
linux系统分区文件系统划分札记
查看>>
Linux(SUSE 12)安装Tomcat
查看>>
Linux(SUSE 12)安装jboss4并实现远程访问
查看>>
Neutron在给虚拟机分配网络时,底层是如何实现的?
查看>>
netfilter/iptables全攻略
查看>>
Overlay之VXLAN架构
查看>>
Eclipse : An error occurred while filtering resources(Maven错误提示)
查看>>
在eclipse上用tomcat部署项目404解决方案
查看>>