日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

C++中vector作为参数的三种传参方式

發布時間:2023/12/18 c/c++ 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C++中vector作为参数的三种传参方式 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

此文章轉載自: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 <iostream>2 #include <vector>3 4 using namespace std;5 6 void function1(std::vector<std::vector<int> > vec)7 {8 cout<<"-----------------------------------------"<<endl;9 //打印vec的地址10 cout<<"function1.&vec:"<<&vec<<endl;11 //打印vec[i]的地址(即第一層vector的地址)12 cout<<"function1.&vec[i]:"<<endl;13 for(int i=0;i<2;i++)14 cout<<&vec[i]<<endl;15 //打印vec的各元素地址16 cout<<"function1.&vec[i][j]:"<<endl;17 for(int i=0;i<2;i++)18 {19 for(int j=0;j<3;j++)20 cout<<&vec[i][j]<<" ";21 cout<<endl;22 }23 cout<<"---------------------------"<<endl;24 //打印vec的各元素值25 cout<<"function1.vec[i][j]:"<<endl;26 for(int i=0;i<2;i++)27 {28 for(int j=0;j<3;j++)29 cout<<vec[i][j]<<" ";30 cout<<endl;31 }32 }33 void function2(std::vector<std::vector<int> >& vec)34 {35 cout<<"-----------------------------------------"<<endl;36 //打印vec的地址37 cout<<"function2.&vec:"<<&vec<<endl;38 //打印vec[i]的地址(即第一層vector的地址)39 cout<<"function2.&vec[i]:"<<endl;40 for(int i=0;i<2;i++)41 cout<<&vec[i]<<endl;42 //打印vec的各元素地址43 cout<<"function2.&vec[i][j]:"<<endl;44 for(int i=0;i<2;i++)45 {46 for(int j=0;j<3;j++)47 cout<<&vec[i][j]<<" ";48 cout<<endl;49 }50 cout<<"---------------------------"<<endl;51 //打印vec的各元素值52 cout<<"function2.vec[i][j]:"<<endl;53 for(int i=0;i<2;i++)54 {55 for(int j=0;j<3;j++)56 cout<<vec[i][j]<<" ";57 cout<<endl;58 }59 60 }61 void function3(std::vector<std::vector<int> > *vec)62 {63 cout<<"-----------------------------------------"<<endl;64 //打印vec的地址65 cout<<"function3.&vec:"<<vec<<endl;66 //打印vec[i]的地址(即第一層vector的地址)67 cout<<"function3.&vec[i]:"<<endl;68 for(int i=0;i<2;i++)69 cout<<&(*vec)[i]<<endl;70 //打印vec的各元素地址71 cout<<"function3.&vec[i][j]:"<<endl;72 for(int i=0;i<2;i++)73 {74 for(int j=0;j<3;j++)75 cout<<&(*vec)[i][j]<<" ";76 cout<<endl;77 }78 cout<<"---------------------------"<<endl;79 //打印vec的各元素值80 cout<<"function3.vec[i][j]:"<<endl;81 for(int i=0;i<2;i++)82 {83 for(int j=0;j<3;j++)84 cout<<(*vec)[i][j]<<" ";85 cout<<endl;86 }87 }88 89 int main()90 {91 //創建2*3的vector容器v,初始值均初始化為0 1 2 1 2 392 std::vector<std::vector<int> > v(2,std::vector<int>(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<<endl; 101 //打印v[i]的地址(即第一層vector的地址) 102 cout<<"&v[i]:"<<endl; 103 for(int i=0;i<2;i++) 104 cout<<&v[i]<<endl; 105 //打印v的各元素地址 106 cout<<"&v[i][j]:"<<endl; 107 for(int i=0;i<2;i++) 108 { 109 for(int j=0;j<3;j++) 110 cout<<&v[i][j]<<" "; 111 cout<<endl; 112 } 113 114 cout<<"---------------------------"<<endl; 115 //打印v的各元素值 116 cout<<"v[i][j]:"<<endl; 117 for(int i=0;i<2;i++) 118 { 119 for(int j=0;j<3;j++) 120 cout<<v[i][j]<<" "; 121 cout<<endl; 122 } 123 124 function1(v); 125 function2(v); 126 function3(&v); 127 128 return 0; 129 }

?

輸出(為便于觀察,簡單處理了一下效果):

?

簡而言之,vector的內部存儲模型是這個樣子(以main()函數中的v為例):

?關于12個字節的問題,請參考博客http://blog.csdn.net/kangroger/article/details/38386099

總結

以上是生活随笔為你收集整理的C++中vector作为参数的三种传参方式的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。