首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

vector操作收拾

2012-08-11 
vector操作整理其迭代器函数原型:iterator begin()const_iterator begin() constiterator end()const_i

vector操作整理

其迭代器函数原型:

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;

bool empty() const {return szie()==0;}

size_type max_size() const;

void resize(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;
}

vector操作收拾


#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;
}

vector操作收拾 

#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;
}

vector操作收拾  

#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;
}

vector操作收拾


#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;
}

 

vector操作收拾

 

忠告:

1利用标准库功能,以维持可移植性

2记住标准库功能都定义在std名字里

3用base()可以从reverse_iterator提取iterator

4通过引用传递容器

5多用容器和push_back()或resize(),少用数组和realloc()

 

 

热点排行