其迭代器函数原型:
iterator begin();
const_iterator begin() const;
iterator end();
const_iterator end() const;
reverse_iterator rbegin();
const_reverse_iterator rbegin() const;
reverse_iterator rend();
const_reverse_iterator rend() const;
其访问操作:
reference operator[ ](size_type n);
const_reference operator[ ](size_type n) const;
reference at(size_type n) ;//在各种标准序列里,只有vector和deque支持下标操作。list没有这个操作,因为list是链表,不是随机存取,更适合增删改
const_reverence at(size_type n) conset;
其构造函数原型:
explicit vector(const A&=A());
explicit vector(size_type n,const T& val=T(),const A&=A());
template<typename In>
vector(In first,In last,const A&=A());
vector(const vector& x);
~vector();
vector& operator=(const vector& x);
template<typename In>
void assign(In first,In last);
void assign(size_type n,const T& val);
其堆栈操作:
void push_back(const T& x);
void pop_back();
其表操作:
iterator insert(iterator pos,const T& x);//返回的迭代器指向新插入的元素
void insert(iterator pos,size_type n,const T& x);
template<typename In>
void insert(iterator pos,In first,In last);
iterator erase(iterator pos);//返回的迭代器指向被删除的最后元素之后的那个元素
iterator erase(iterator first,iterator last);//返回的迭代器指向被删除的最后元素之后的那个元素
void clear();//等价与c.erase(c.begin(),c.end());
大小容量控制操作:
size_type size() const;
boolempty() const {return szie()==0;}
size_type max_size() const;
voidresize(size_type sz,T val=T());
size_type capacity() const;
void reserve(size_type n);
reserve()并不改变vector的大小,并没有要求它对任何新元素做初始化,在这两个方面都与resize()不一样
其他成员函数:
void swap(vector&);
allocator_type get_allocator() const;
协助函数
template<typename T,typename A>
bool std::operator==(const vector<T,A>&x,const vector<T,A>& y);
template<typename T,typename A>
bool std::operator<(const vector<T,A>& x,const vector<T,A>& y);
标准库还定义了!=,<=,>,>=操作,这里就不一一罗列了。
标准库还提供了特化模板vector<bool>
c.begin()返回的是vector<bool>::const_iterator
vector操作的一些代码:
#include<iostream>
#include<string>
#include<vector>
using namespace std;
int main(){
vector<int>v;
v.push_back(10);
v.push_back(9);
v.push_back(8);
cout<<"before pop"<<endl;
for(vector<int>::iterator ite=v.begin();ite!=v.end();++ite){
cout<<*ite<<endl;
}
v.pop_back();//pop操作
cout<<"after pop"<<endl;
for(vector<int>::iterator iter=v.begin();iter!=v.end();++iter){
cout<<*iter<<endl;
}
system("pause");
return 0;
}
![](https://img-my.csdn.net/uploads/201207/21/1342839274_3546.jpg)
#include<iostream>
#include<string>
#include<vector>
#include<algorithm>
#include<cctype>
using namespace std;
bool findP(string &s){
return s[0]=='p';
}
int main(){
vector<string>fruit;
fruit.push_back("peach");
fruit.push_back("apple");
fruit.push_back("kiwifruit");
fruit.push_back("pear");
fruit.push_back("starfruit");
fruit.push_back("grape");
for(vector<string>::iterator iter=fruit.begin();iter!=fruit.end();++iter){
cout<<*iter<<" ";
}
cout<<endl;
cout<<"**********************************"<<endl;
//下面要将以p开头的水果删掉
sort(fruit.begin(),fruit.end());//algorithm定义的排序算法
vector<string>::iterator p1=fruit.begin();
while((p1=find_if(p1,fruit.end(),findP))!=fruit.end()){
p1=fruit.erase(p1);//返回的是一个指向被删除的下一个元素的迭代器,所说后面要减一
--p1;
++p1;
}
for(vector<string>::iterator ite=fruit.begin();ite!=fruit.end();++ite){
cout<<*ite<<" ";
}
cout<<endl;
system("pause");
return 0;
}
![](https://img-my.csdn.net/uploads/201207/21/1342839279_8583.jpg)
#include<iostream>
#include<vector>
#include<string>
using namespace std;
int main(){
int a[]={1,2,3,4,5,6,7,8,9,10};
int b[]={11,22,33,44,55,66,77,88,99,1010};
vector<int>v1(a,a+10);
vector<int>v2(b,b+10);
cout<<"before swap"<<endl;
for(vector<int>::iterator iter=v1.begin();iter!=v1.end();++iter){
cout<<*iter<<" ";
}
cout<<endl;
for(vector<int>::iterator iter2=v2.begin();iter2!=v2.end();++iter2){
cout<<*iter2<<" ";
}
cout<<endl;
cout<<"after swap"<<endl;
v1.swap(v2);
for(vector<int>::iterator it=v1.begin();it!=v1.end();++it){
cout<<*it<<" ";
}
cout<<endl;
for(vector<int>::iterator ite2=v2.begin();ite2!=v2.end();++ite2){
cout<<*ite2<<" ";
}
cout<<endl;
system("pause");
return 0;
}
![](https://img-my.csdn.net/uploads/201207/21/1342839285_6910.jpg)
#include<iostream>
#include<string>
#include<vector>
using namespace std;
int main(){
vector<char>c;
for(char ch='a';ch<='z';++ch){
c.push_back(ch);
}
for(vector<char>::iterator iter=c.begin();iter!=c.end();++iter){
cout<<*iter<<" ";
}
cout<<endl;
for(vector<char>::reverse_iterator riter=c.rbegin();riter!=c.rend();++riter){
cout<<*riter<<" ";
}
cout<<endl;
system("pause");
return 0;
}
![](https://img-my.csdn.net/uploads/201207/21/1342839408_3092.jpg)
#include<iostream>
#include<string>
#include<vector>
#include<algorithm>
using namespace std;
int main(){
string s[]={"a","w","e","a","c","w","g","t","j","k","r","p","i","u","t","a","s"};
vector<string>v(s,s+17);
cout<<"before"<<endl;
for(vector<string>::iterator iterb=v.begin();iterb!=v.end();++iterb){
cout<<*iterb<<" ";
}
cout<<endl;
sort(v.begin(),v.end());
vector<string>::iterator first=find(v.begin(),v.end(),"a");
vector<string>::reverse_iterator last=find(v.rbegin(),v.rend(),"a");
v.erase(first,last.base());//iterator和reverse_iterator是不同的类型,reverse_iterator可以通过base()提取iterator
cout<<"after"<<endl;
for(vector<string>::iterator itera=v.begin();itera!=v.end();++itera){
cout<<*itera<<" ";
}
system("pause");
return 0;
}
![](https://img-my.csdn.net/uploads/201207/21/1342839289_1000.jpg)
忠告:
1利用标准库功能,以维持可移植性
2记住标准库功能都定义在std名字里
3用base()可以从reverse_iterator提取iterator
4通过引用传递容器
5多用容器和push_back()或resize(),少用数组和realloc()