C++(筆記)容器(vector)作為函式引數如何傳參
阿新 • • 發佈:2018-12-26
一、大致以下型別
- void 函式名( vector< int> obj );
- void 函式名( vector< int>* pobj );
- void 函式名( const vector< int>* pobj ); // 在函式內不能改變 pobj 指向的物件 ,//呼叫時不會呼叫拷貝建構函式
- void 函式名( vector< int>& obj );
- 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的拷貝建構函式浪費資源。
//輸出: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++;
}
}