vector、algorithm、deque、functional、iterrator、list、map、memory、numeric、queue、set、stack、utility
vector的声明:
vector<type> vec;
size();resize();at();front();back();begin();end();rbegin();rend();empty();assign();swap();clear();erase();insert()
vector&oprator=(const vector& vec);
迭代器的声明 :
vector<type>::iterator it;
vector<type>::const_iterator it;
vector<type>::reverse_iterator it;
vector<type>::const_reverse_iterator it;
- 存取元素的方法
vec[i]
- 存取索引值i 的元素。第一vec[0]vec.at(i)
- 存取索引值 i 的元素的參照,以 at() 存取會做陣列邊界檢查,如果存取越界將會拋出一個例外,這是與operator[]的唯一差異。vec.front()
- 回傳 vector 第一個元素的參照。vec.back()
- 回傳 vector 最尾元素的參照。
- 新增或移除元素的方法
vec.push_back()
- 新增元素至 vector 的尾端,必要時會進行記憶體配置。vec.pop_back()
- 刪除 vector 最尾端的元素。vec.insert()
- 插入一個或多個元素至 vector 內的任意位置。vec.erase()
- 刪除 vector 中一個或多個元素。vec.clear()
- 清空所有元素。
- 取得長度/容量
vec.size()
- 取得 vector 目前持有的元素個數。vec.empty()
- 如果 vector 內部為空,則傳回 true 值。vec.capacity()
- 取得 vector 目前可容納的最大元素個數。這個方法與記憶體的配置有關,它通常只會增加,不會因為元素被刪減而隨之減少。
- 重新配置/重設長度
vec.reserve()
- 如有必要,可改變 vector 的容量大小(配置更多的記憶體)。在眾多的 STL 實做,容量只能增加,不可以減少。vec.resize()
- 改變 vector 目前持有的元素個數。
- 迭代 (Iterator)
vec.begin()
- 回傳一個Iterator,它指向 vector 第一個元素。vec.end()
- 回傳一個Iterator,它指向 vector 最尾端元素的下一個位置(請注意:它不是最末元素)。vec.rbegin()
- 回傳一個反向Iterator,它指向 vector 最尾端元素的。vec.rend()
- 回傳一個Iterator,它指向 vector 的第一個元素。
简单应用:
#include <iostream>
#include<vector>
using namespace std;
int main()
{
vector<int> v;
cout<<"在后面插入元素 "<<endl;;
for(int i=0;i<10;i++){
v.push_back(i);
}
cout<<"删除最后一个元素 "<<endl;;
v.pop_back();
v.pop_back();
cout<<"打印 "<<endl;;
for(size_t i=0;i<v.size();i++){
cout<<"第"<<i<<"个元素"<<":"<<v[i]<<endl;
}
cout<<"使用front()、at()、back() "<<endl;
cout<<v.front() //front()、back()、back()也能充当可修改的左值
<<"-"<<v.at(4)
<<"-"<<v.back()<<endl;
cout<<"判断不为空、插入元素"<<endl;;
for(int i=0;i<10;i++){
if(!v.empty())
v.push_back(++i);
}
cout<<"打印vector数组元素"<<endl;;
for(size_t i=0;i<v.size();i++){
cout<<"第"<<i<<"个元素"<<":"<<v[i]<<endl;
}
return 0 ;
}
比较全面的应用:
#include <iostream>
#include<vector>
#include <cstdlib>
using namespace std;
int main()
{
vector<int> v1;
vector<int>::iterator it;
for(int i=0;i<10;i++){
v1.push_back(i);
}
cout<<"正向输出:"<<endl;
for(it=v1.begin();it!=v1.end();it++){
cout<<*it<<" ";
}
cout<<endl;
cout<<"反向输出:"<<endl;
vector<int>::reverse_iterator rit;
for(rit=v1.rbegin();rit!=v1.rend();rit++){
cout<<*rit<<" ";
}
cout<<endl<<"--------------------------------------"
<<endl<<"v2:"<<endl;
int arr[]={0,1,2,3,4,5,6,7,8,9};
vector<int> v2(arr,arr+10); //将arr数组复制到容器v2中去
vector<int>::iterator it2;
for(it2=v2.begin();it2!=v2.end();it2++){
cout<<*it2<<" ";
}
cout<<endl<<"v3:"<<endl;
vector<int> v3(v2.begin(),v2.end());//利用构造函数初始化容器v3
vector<int>::iterator it3;
for(it3=v3.begin();it3!=v3.end();it3++){
cout<<*it3<<" ";
}
cout<<endl<<"v4:"<<endl;
//erase和insert对于const iterater和const reverse_itetater并不支持
vector<int> v4(10,10);
vector<int>::iterator it4;
for(it4=v4.begin();it4!=v4.end();it4++){
cout<<*it4<<" ";
}
//resize()的使用
cout<<endl<<"v1大小:"<<v1.size()<<endl<<"v2大小:"<<v2.size()
<<endl<<"v3大小:"<<v3.size()<<endl<<"v4大小:"<<v4.size()
<<endl;
v3.resize(10,0);
cout<<"resize()为10后v3的大小:"<<v3.size()<<endl;
for(int i=0;i<(int)v3.size();i++){
cout<<v3[i]<<" ";
}
v3.resize(5);
cout<<endl<<"resize()为5后v3的大小:"<<v3.size()<<endl;
for(int i=0;i<(int)v3.size();i++){
cout<<v3[i]<<" ";
}
//擦除的使用
v1.clear();
cout<<endl<<"v1全擦除后的大小:"<< v1.size()<<endl;
cout<<"插入操作insert()";
vector<int>::iterator itx;
itx=v1.begin();
cout<<endl<<"在位置1插入88"<<endl;;
v1.insert(itx,88);//在开始的位置插入111,
for(int i=0;i<(int)v1.size();i++){
cout<<v1[i]<<" ";
}
cout<<endl;
v1.insert(itx,10,5);//从位置0开始连续插入10个5;
for(int i=0;i<(int)v1.size();i++){
cout<<v1[i]<<" ";
}
cout<<endl<<"擦除位置5到位置10的元素"<<endl;
v1.erase(itx+5,itx+10); //擦除位置5到位置10的元素、
for(int i =0;i<(int)v1.size();i++){
cout<<v1[i]<<" ";
}
v1.clear();
cout<<endl<<"全擦除后v1大小"<<v1.size()<<endl;
vector<int> vec;
vec.swap(v2);
vec.reserve(1000);
cout<<vec.size()<<endl;
return 0 ;
}