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;

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


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

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

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


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

忠告

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

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

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

4通过引用传递容器

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值