ArrayList用迭代器遍歷的過程中是否可以刪除資料?
阿新 • • 發佈:2021-01-03
技術標籤:c++
引數傳遞
C++中引數傳遞有兩種方式:
- 傳值方式
- 傳地址方式
傳值方式
函式呼叫時如果用傳值方式實參的值是不會變的
#include<iostream>
using namespace std;
void swap(int a, int b);
int main() {
int a, b;
cin >> a >> b;``
swap(a, b);//使a和b的值進行交換
cout << a << b;
return 0;
}
void swap(int a, int b) {
int t;
t = a;
a = b;
b = t;
}
傳地址方式
將實參的地址傳給形參,從而交換形參的值,那麼實參的值也會發生交換。
其方法有三:
- 引數為指標的變數
- 引數為引用型別
- 引數為陣列名
引數為指標的變數
#include<iostream>
using namespace std;
void swap(int* a, int* b);
int main() {
int a, b,*p1,*p2;
cin >> a >> b;
p1 = &a;//將a的地址賦給p1
p2 = &b;//將b的地址賦給p2
swap(p1, p2);
cout << a << b;
return 0;
}
void swap(int* a, int* b) {
int t;
t = *a;
*a = *b;
*b = t;//交換a和b地址裡的內容
}
a和b的值成功的進行了交換。
這裡容易發生一個錯誤,如果將swap函式寫成這樣:
void swap(int* a, int* b) {
int* t;
t = a;
a = b;
b = t;
}
則主函式中a和b的值並不會交換。
因為該swap函式只是將形參所指向的地址值交換了,並不會對實參產生影響。
引數為引用型別
#include<iostream>
using namespace std;
void swap(int* a, int* b);
int main() {
int a, b;
cin >> a >> b;
swap(a, b);
cout << a << b;
return 0;
}
void swap(int& a, int& b) {
int t;
t = a;
a = b;
b = t;
}
引數為陣列名
#include<iostream>
using namespace std;
#define length() sizeof(arr)/sizeof(arr[0])
void remove(int* arr);
int main() {
int arr[] = { 0,6,2,3,4 };
remove(arr);//刪除該陣列的最後一個元素
for (int i = 0; i < length(arr); i++) {
cout << arr[i];
}
return 0;
}
void remove(int* arr) {
arr[4] = NULL;
}
其實陣列名就是一個指向一個數組開頭地址的指標,相當於引數為指標的傳遞方式一樣。