STL—vector(向量容器)
阿新 • • 發佈:2018-12-21
什麼是vector:
vector是一種可以完全代替陣列的高效容器。完全代替陣列的意思就是,陣列能幹的vector都能幹,如隨機訪問元素,用下標遍歷元素等。陣列不能幹的它也能幹,如記憶體自動管理功能,即它可以根據元素的插刪動態調整所佔的記憶體空間。
標頭檔案
#include<vector>
基本操作
push_back(); //從尾部插入元素 insert(); //插入新元素,可在任意位置 erase(); //刪除迭代器所指的一個元素或一個區域 clear(); //刪除所有元素 size(); //返回向量的大小 empty(); //判斷是否為空 reverse(); //反向排序演算法,此演算法需要宣告標頭檔案 #include<algorithm> sorp(); //預設用升序排序,但是也可以自定義排序規則,加標頭檔案#include<algorithm>
建立vector物件
vector<int> p; //建立物件p,不指定元素個數
vector<double> p(10); //建立物件p ,指定有10個元素,預設為0.0
vector<double> p(10,12.3); //建立物件p,指定有10個元素,且每個元素的值都為12.3
元素插入
1.從尾部擴張插入
p.push_back(a); //將 a 的值插入到物件 p 的尾部
2.利用迭代器插入
p.insert(p.begin(),5); //在最前面插入新元素5 p.insert(p.begin()+2,5) //在下標為2的元素前面插入新元素5
元素刪除
p.erase(p.begin()+2); //刪除下標為2的元素
p.erase(p.begin()+1,p.begin()+5); //刪除下標為[1.5)的元素,區間左閉右開
p.clear(); //刪除所有元素
利用reverse反向排序
everse(p.begin(),p.end()); //這種方法還可以只排序規定的區間,如
reverse(p.begin()+2,p.begin()+8)//將下標為[2,8)的元素進行反排序
利用sort演算法排序
sorp(p.begin(),p.end()); //預設升序排列,也可以只排列一個區間 sorp(p.begin(),p.end(),comp) //利用自定義排序規則comp進行排序
sort排序規則定義方法
非結構體
bool comp(const &a,const &b)
{
return a>b;//降序
}
另:
bool comp(int a,int b)
{
return a>b;
}
結構體
struct lei
{
int k;
int w;
}a,b;
bool com(lei a,lei b)
{
return a.k>b.k;//降序
}
程式碼示例
#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;
int main()
{
int i;
vector<double> p;
// vector<int> p(10); //建立一個物件,內部儲存著是個元素,每個元素都為0
// vector<int> p(10,8); //建立vector物件,規定有10個元素,都為8,同樣可用 p.push_back()從尾部擴張元素
for(i=0;i<10;i++)
{
p.push_back(i+1); //尾插法擴張元素
}
cout<<p.size()<<endl;
// p.insert(p.begin()+2,6); //insert()隨意插入,插在下標為2的前面
for(i=0;i<10;i++) //下標法遍歷
{
cout<<p[i]<<" ";
}
// reverse(p.begin(),p.end()); //反向排序
cout<<endl;
p.erase(p.begin()+2); //刪除單個元素 第三個 可理解為下標,p.begin()為首元素地址,首元素其下標為0,故p.begin()+2則為下標為2的元素
p.erase(p.begin(),p.begin()+3); //刪除區間元素 第一個到第三個 /*凡涉及到區間的都是左閉右開*/
// p.clear() //刪除所有元素 p.erase(p.begin(),p.end());效果一樣
vector<double>::iterator it,il; //定義迭代器變數
for(it=p.begin();it!=p.end();it++) //迭代器法遍歷
{
cout<<*it<<" ";
}
cout<<endl;
return 0;
}