1. 程式人生 > 其它 >c++中動態陣列vector的使用方法

c++中動態陣列vector的使用方法

技術標籤:資料結構c++程式碼vectorc++資料結構動態陣列

如果要使用vector,需要標頭檔案#include< vector >
1、vector容器內元素的訪問:
①通過下標進行訪問:
這種訪問和正常的陣列類似,只是需要注意的是,需要用push_back將元素放入陣列中;

#include <iostream>
#include <vector> 
using namespace std;
int main() {
    vector<int >v;
    for(int i=0;i<5;i++){
    	v.push_back
(i); } for(int i=0;i<5;i++){ cout<<v[i]<<" "; } return 0; }

輸出結果:
在這裡插入圖片描述
②通過迭代器的方式進行訪問:

#include <iostream>
#include <vector> 
using namespace std;
int main() {
    vector<int >v;
    for(int i=0;i<5;i++){
    	v.push_back(i);
	}
	vector<int>::iterator it;
//等價於auto it; for(it=v.begin();it!=v.end();it++){ cout<<*it<<" "; } return 0; }

輸出結果一樣,這裡迴圈結束的條件可以是it!=v.end(),也可以是it<v.end(),只有再vector和string試用,在別的比如set是不試用的

2、vector常用的函式解析
①push_back(i)指的是將i放入動態陣列中,上述程式碼已展示,這裡就省略了。
②pop_back 有新增就會有刪除,這裡指的是刪除陣列末尾的元素,程式碼展示:

#include <iostream>
#include <vector> using namespace std; int main() { vector<int >v; for(int i=0;i<5;i++){ v.push_back(i); } vector<int>::iterator it; //等價於auto it; v.pop_back(); for(it=v.begin();it<v.end();it++){ cout<<*it<<" "; } return 0; }

此時的輸出結果:將末尾的4刪除了。在這裡插入圖片描述
③size
這是用來獲得vector中的元素個數,返回的是unsigned型別(一般用int不會出錯),為了更方便理解,還是一段程式碼:

#include <iostream>
#include <vector> 
using namespace std;
int main() {
    vector<int >v;
    for(int i=0;i<5;i++){
    	v.push_back(i);
	}
	vector<int>::iterator it;
	//等價於auto it;
	v.pop_back();
	for(it=v.begin();it<v.end();it++){
		cout<<*it<<" ";
	}
	cout<<endl<<v.size();//一共四個元素
	return 0;
}


輸出結果:在這裡插入圖片描述
④clear:
用於清空所有的元素:

#include <iostream>
#include <vector> 
using namespace std;
int main() {
    vector<int >v;
    for(int i=0;i<5;i++){
    	v.push_back(i);
	}
	vector<int>::iterator it;
	//等價於auto it;
	v.pop_back();
	for(it=v.begin();it<v.end();it++){
		cout<<*it<<" ";
	}
	cout<<endl<<v.size();
	v.clear();//清除陣列
	cout<<endl<<v.size();//此時輸出0
	return 0;
}


在這裡插入圖片描述
⑤insert
指的是在特定的位置插入一個元素,這裡需要用到迭代器;

#include <iostream>
#include <vector> 
using namespace std;
int main() {
    vector<int >v;
    for(int i=0;i<5;i++){
    	v.push_back(i);
	}
	auto it=v.begin()+2;//定義it指向陣列中下標為2的位置
	v.insert(it,9);//在該位置將9插入
	//等價於v.insert(v.begin()+2,9);
	for(int i=0;i<v.size();i++){
		cout<<v[i]<<" ";
	}
	return 0;
}


輸出結果:在這裡插入圖片描述
⑥erase
與set一樣,依舊是兩種用法,第一種,刪除指定位置的元素;

#include <iostream>
#include <vector> 
using namespace std;
int main() {
    vector<int >v;
    for(int i=0;i<5;i++){
    	v.push_back(i);
	}
	v.insert(v.begin()+2,9);
	v.erase(v.begin()+3);
	for(int i=0;i<v.size();i++){
		cout<<v[i]<<" ";
	}
	return 0;
}


在這裡插入圖片描述
第二種,刪除一個區間的元素[first,last)(左閉右開)

#include <iostream>
#include <vector> 
using namespace std;
int main() {
    vector<int >v;
    for(int i=0;i<5;i++){
    	v.push_back(i);
	}
	v.insert(v.begin()+2,9);
	v.erase(v.begin()+3,v.begin()+5);//這裡是刪除從第一個元素開始的第三個到第四個(沒有第五個,右區間是開的)
	for(int i=0;i<v.size();i++){
		cout<<v[i]<<" ";
	}
	return 0;
}


在這裡插入圖片描述
這裡發現,clear函式和erase(begin,end)是一個意思,那有人會問,明明右邊是開區間,那麼最後一個元素應該沒法刪除啊?
這裡的end指的是最後一個元素地址的下一個地址,所以包含最後一個元素。

如果你覺得有幫助,請點個贊!