c++中動態陣列vector的使用方法
阿新 • • 發佈:2021-02-01
技術標籤:資料結構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指的是最後一個元素地址的下一個地址,所以包含最後一個元素。
如果你覺得有幫助,請點個贊!