您的位置:首页 > 编程语言

STL之Vector的一些编程练习

2016-03-09 22:11 323 查看
#include<iostream>
#include<vector>
using namespace std;

void out(int &a){
cout<<a<<endl;
}
int main(){
//插入,在位置的前面插入
//多个值插入,从第一个位置的值到第二个位置的前一个值
vector<int> s;
for(int i=0;i<5;i++)
s.push_back(i);
for_each(s.begin(),s.end(),out);
s.insert(s.begin(),1);
cout<<"后:"<<endl;
for_each(s.begin(),s.end(),out);
vector<int> c;
for(int i=0;i<3;i++)
c.push_back(9);
s.insert(s.begin(),c.begin(),c.end());
cout<<"后来:"<<endl;
for_each(s.begin(),s.end(),out);
return 0;
}
//c.at(),c[index]返回的为引用
//c.front()首个元素c.back()最后一个元素
//sort略

/*****删除:位置或区间*********
vector<int> s;
for(int i=0;i<5;i++)
s.push_back(i);
for_each(s.begin(),s.end(),out);
s.erase(s.begin());//删除位置为该位置
for_each(s.begin(),s.end(),out);
s.erase(s.begin(),s.end()-1);//删除的元素为从第一个位置到第二个位置的前一个
for_each(s.begin(),s.end(),out);
****************/

/*****swap交换(可同类型,可不同)**********
void out(int &a){
cout<<a<<endl;
}
vector<int> c;
for(int i=0;i<3;i++)
c.push_back(9);
cout<<"C:"<<endl;
for_each(c.begin(),c.end(),out);
vector<int> s;
for(int i=0;i<5;i++)
s.push_back(i);
cout<<"S:"<<endl;
for_each(s.begin(),s.end(),out);
c.swap(s);
cout<<"C:"<<endl;
for_each(c.begin(),c.end(),out);
cout<<"S:"<<endl;
for_each(s.begin(),s.end(),out);
*******************/

/***find(s.begin(),s.end(),常数)*****
****find_if(s.begin(),s.end(),一元bool函数)
****均返回指针值不是下标************
bool eq(int i){
if(i==3)return true;
return false;
}
vector<int> s;
for(int i=0;i<5;i++)
s.push_back(i);
cout<<"数据为3的下标为:"<<endl;
cout<<find_if(s.begin(),s.end(),eq)-s.begin();
cout<<find(s.begin(),s.end(),3)-s.begin();
return 0;

****************************************/

/*******C++中对正逆序遍历提供的两种迭代器与函数*
vector<int> s;
for(int i=0;i<5;i++)
s.push_back(i);
cout<<"顺序:"<<endl;
vector<int>::iterator the;
for(the=s.begin();the!=s.end();the++)
cout<<*the<<endl;
cout<<"逆序:"<<endl;
vector<int>::reverse_iterator it;
for(it=s.rbegin();it!=s.rend();it++)
cout<<*it<<endl;

****************/

/***增加push_back、删除pop_back、遍历****
vector<int> s;
for(int i=0;i<10;i++)
s.push_back(i);//尾部增加
vector<int>::iterator it;
cout<<"修改前"<<endl;
for(it=s.begin();it!=s.end();it++)
cout<<*it<<endl;
cout<<"修改后"<<endl;
for(int i=0;i<5;i++)
s.pop_back();//尾部删除
for(it=s.begin();it!=s.end();it++)
cout<<*it<<endl;
*********************/

//未reserve就 s[0]=1; 是错误的
/**正确****
vector<int> s;
s.reserve(4);
s[0]=1;
***********/

/***容量******
vector<int> s;
s.reserve(10);//容器容量定为10,但是不初始化s,size仍为0
cout<<"容器大小:"<<s.size()<<endl;
cout<<"容器容量:"<<s.capacity()<<endl;
cout<<"容器最大容量:"<<s.max_size()<<endl;
s.resize(20);//容器容量定为20,初始化s并将其初始化问0,size为20
for(int i=0;i<20;i++)
cout<<s[i]<<endl;//输出0
cout<<"容器大小:"<<s.size()<<endl;//20
cout<<"容器容量:"<<s.capacity()<<endl;//20
cout<<"容器最大容量:"<<s.max_size()<<endl;
************/

/****返回值不弹出:back()***
vector<int> s;
s.push_back(1);
for(int i=0;i<10;i++)
cout<<s.back()<<endl;
**************/

/***两种遍历方法**
vector<int> s;
for(int i=0;i<10;i++)
s.push_back(i);
for(int i=0;i<10;i++)
cout<<s.at(i)<<endl;
for(int i=0;i<s.size();i++)
cout<<s[i]<<endl;
************/

/*倒序输出,并清空----一种遍历
vector<int> s;
for(int i=0;i<10;i++)
s.push_back(i);
while(!s.empty()){
int t=s.back();
cout<<t<<endl;
s.pop_back();
}
cout<<s.size();
*************/

/***morethan、out函数***
bool morethan(int& i){
if(i>10)
return true;
return false;
}

void out(int &i){
cout<<i<<endl;
}
**********/
/**输出符合条件的个数 和 对每一个元素进行操作
vector<int> s;
for(int i=0;i<5;i++)
s.push_back(i);
for(int i=0;i<2;i++)
s.push_back(11+i);
cout<<"10以上的:"<<count_if(s.begin(),s.end(),morethan)<<endl;//morethan函数
cout<<"输出:"<<endl;
for_each(s.begin(),s.end(),out);//out函数
********************/

/******对每一个元素进行操作**
void plusw(int& a){
a++;
}
void out(int&a){
cout<<a<<endl;
}
vector<int> s;
for(int i=0;i<10;i++)
s.push_back(i);
cout<<"之前:"<<endl;
for_each(s.begin(),s.end(),out);
for_each(s.begin(),s.end(),plusw);
cout<<"处理后:"<<endl;
for_each(s.begin(),s.end(),out);
********************/


四种正向遍历:

for_each

s.at()

s[index]

iterator

一种逆序遍历:

reserve_iterator

s.rbegin()

s.rend()

插入,删除,查找

交换
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: