C++杂谈
来源:互联网 发布:淘宝企业店铺入驻 编辑:程序博客网 时间:2024/06/03 21:07
一:函数参数为vector<T>,在函数中为vector添加元素,函数结束后,对vector的更改是无效的。通过vector地址的输出,可以看到传参时确实对vector进行了拷贝。
测试代码:
void test_vector( vector<int> vec){
cout<<&vec<<endl;
vec.push_back(1);
vec.push_back(2);
}
int main()
{
vector<int> arr = vector<int>(1,0);//第一个参数必须非负,可以为0
cout<<&arr<<endl;
for( int i=0; i<arr.size(); ++i )
cout<<arr[i]<<" ";
cout<<endl;
test_vector(arr);
cout<<"after call test_vector function"<<endl;
for( int i=0; i<arr.size(); ++i )
cout<<arr[i]<<" ";
cout<<endl;
/*0054FA84
0
0054F954
after call test_vector function
0
*/
}
二:在函数中申请局部变量加入vector,会调用复制构造函数。
#include<iostream>#include<vector>using namespace std;class T{public:<span style="white-space:pre"></span>int data;<span style="white-space:pre"></span>T()<span style="white-space:pre"></span>{<span style="white-space:pre"></span>data = 0;<span style="white-space:pre"></span>cout<<"no paragram constructor. data= "<<data<<endl;<span style="white-space:pre"></span>}<span style="white-space:pre"></span>T(int d)<span style="white-space:pre"></span>{<span style="white-space:pre"></span>data = d;<span style="white-space:pre"></span>cout<<"paragram constructor. data= "<<data<<endl;<span style="white-space:pre"></span>}<span style="white-space:pre"></span>T(const T& t)<span style="white-space:pre"></span>{<span style="white-space:pre"></span>data = t.data;<span style="white-space:pre"></span>cout<<"copy constructor data="<<data<<endl;<span style="white-space:pre"></span>}};void test_vector( vector<T> vec){<span style="white-space:pre"></span>cout<<"call function"<<endl;<span style="white-space:pre"></span>cout<<"vec capacity :"<<vec.capacity()<<endl;<span style="white-space:pre"></span>vec.push_back(1);<span style="white-space:pre"></span>cout<<"vec capacity :"<<vec.capacity()<<endl;<span style="white-space:pre"></span>vec.push_back(2);<span style="white-space:pre"></span>cout<<"vec capacity :"<<vec.capacity()<<endl;<span style="white-space:pre"></span>vec.push_back(3);<span style="white-space:pre"></span>cout<<"vec capacity :"<<vec.capacity()<<endl;<span style="white-space:pre"></span>vec.push_back(4);<span style="white-space:pre"></span>cout<<"vec capacity :"<<vec.capacity()<<endl;<span style="white-space:pre"></span>vec.push_back(5);<span style="white-space:pre"></span>cout<<"vec capacity :"<<vec.capacity()<<endl;<span style="white-space:pre"></span>vec.push_back(6);<span style="white-space:pre"></span>cout<<"vec capacity :"<<vec.capacity()<<endl;}int main(){<span style="white-space:pre"></span>vector<T> arr;<span style="white-space:pre"></span>arr.push_back(0);<span style="white-space:pre"></span>for( int i=0; i<arr.size(); ++i )<span style="white-space:pre"></span>cout<<arr[i].data<<" ";<span style="white-space:pre"></span>cout<<endl;<span style="white-space:pre"></span>test_vector(arr);<span style="white-space:pre"></span>cout<<"after call test_vector function"<<endl;<span style="white-space:pre"></span>for( int i=0; i<arr.size(); ++i )<span style="white-space:pre"></span>cout<<arr[i].data<<" ";<span style="white-space:pre"></span>cout<<endl;<span style="white-space:pre"></span>/*<span style="white-space:pre"></span>paragram constructor. data= 0<span style="white-space:pre"></span>copy constructor data=0<span style="white-space:pre"></span>0<span style="white-space:pre"></span>copy constructor data=0<span style="white-space:pre"></span>call function<span style="white-space:pre"></span>vec capacity :1<span style="white-space:pre"></span>paragram constructor. data= 1<span style="white-space:pre"></span>copy constructor data=0<span style="white-space:pre"></span>copy constructor data=1<span style="white-space:pre"></span>vec capacity :2<span style="white-space:pre"></span>paragram constructor. data= 2<span style="white-space:pre"></span>copy constructor data=0<span style="white-space:pre"></span>copy constructor data=1<span style="white-space:pre"></span>copy constructor data=2<span style="white-space:pre"></span>vec capacity :3<span style="white-space:pre"></span>paragram constructor. data= 3<span style="white-space:pre"></span>copy constructor data=0<span style="white-space:pre"></span>copy constructor data=1<span style="white-space:pre"></span>copy constructor data=2<span style="white-space:pre"></span>copy constructor data=3<span style="white-space:pre"></span>vec capacity :4<span style="white-space:pre"></span>paragram constructor. data= 4<span style="white-space:pre"></span>copy constructor data=0<span style="white-space:pre"></span>copy constructor data=1<span style="white-space:pre"></span>copy constructor data=2<span style="white-space:pre"></span>copy constructor data=3<span style="white-space:pre"></span>copy constructor data=4<span style="white-space:pre"></span>vec capacity :6<span style="white-space:pre"></span>paragram constructor. data= 5<span style="white-space:pre"></span>copy constructor data=5<span style="white-space:pre"></span>vec capacity :6<span style="white-space:pre"></span>paragram constructor. data= 6<span style="white-space:pre"></span>copy constructor data=0<span style="white-space:pre"></span>copy constructor data=1<span style="white-space:pre"></span>copy constructor data=2<span style="white-space:pre"></span>copy constructor data=3<span style="white-space:pre"></span>copy constructor data=4<span style="white-space:pre"></span>copy constructor data=5<span style="white-space:pre"></span>copy constructor data=6<span style="white-space:pre"></span>vec capacity :9<span style="white-space:pre"></span>after call test_vector function<span style="white-space:pre"></span>0<span style="white-space:pre"></span>*/<span style="white-space:pre"></span>return 0;}从输出中可以看到每次为vector添加一个int会自动调用有参构造函数构造一个临时对象然后再调用复制构造函数对临时对象进行复制。(注意vector容量增长)
三:函数参数改为vector& ,对vector的更改确实生效了。
#include<iostream>#include<vector>using namespace std;void test_vector( vector<int>& vec){cout<<&vec<<endl;cout<<"call function"<<endl;vec.push_back(1);vec.push_back(2);}int main(){vector<int> arr;arr.push_back(0);cout<<&arr<<endl;for( int i=0; i<arr.size(); ++i )cout<<arr[i]<<" ";cout<<endl;test_vector(arr);cout<<"after call test_vector function"<<endl;for( int i=0; i<arr.size(); ++i )cout<<arr[i]<<" ";cout<<endl;/*0050F8DC00050F8DCcall functionafter call test_vector function0 1 2*/return 0;}
0 0
- C++&杂谈
- c语言杂谈1
- c 与c++ 杂谈
- 产品杂谈c
- C/C++杂谈
- C语言杂谈
- C/C++语言杂谈
- C-函数杂谈
- C\\C++语言杂谈
- C语言指针杂谈
- Objective-C runtime杂谈
- C语言知识点杂谈
- C++,类,模板杂谈__Boolan
- Unix C杂谈(笔记)
- c二级操作题杂谈
- 杂谈
- 杂谈
- 杂谈
- C++必读书籍推荐
- leetcode || 110、Balanced Binary Tree
- 库
- struts2动态方法调用
- android网络编程之——客户端上传信息到网络上面网页(GET)
- C++杂谈
- 两种数据类型的内存
- informatica [REP_55102] Failed to connect to repository service如何解决?
- JPA使用指南 javax.persistence的注解配置
- DirectX11-Sample-Tutorial05-立方体的绘制和坐标系的变换
- eclipse 突然打不开,loading WorkBench后退出,闪退。
- 关于JavaScript与HTML的交互事件
- pci-skeleton
- java note -2 mysql 总结