1. 程式人生 > 實用技巧 >ArrayList用迭代器遍歷的過程中是否可以刪除資料?

ArrayList用迭代器遍歷的過程中是否可以刪除資料?

技術標籤: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; }

很顯然主函式中a和b的值並沒有進行交換

傳地址方式

將實參的地址傳給形參,從而交換形參的值,那麼實參的值也會發生交換。
其方法有三:

  • 引數為指標的變數
  • 引數為引用型別
  • 引數為陣列名

引數為指標的變數

#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;
}

其實陣列名就是一個指向一個數組開頭地址的指標,相當於引數為指標的傳遞方式一樣。