STL中的序列式容器主要有vector、deque(双端队列)、list
1、vector
代码如下:
/*
* vector_2.cpp
*
* Created on: 2013年8月6日
* Author: Administrator
* 为了能有章泽天这样的女朋友。。。。。
*/
#include <iostream>
#include <vector>
using namespace std;
template <typename T>
void print(T b , T e,char c = ' '){
while(b!=e){
cout<<*b++<<c;
}
cout<<endl;
}
int main(){
vector<double> vd,vv;
for(int i = 0 ; i < 9 ; ++i ){
vd.push_back(i+0.1);
cout<<&*vd.begin()<<':';
//capacity():返回vector的当前容量
//size():返回vector已经使用的容量
cout<<vd.size()<<'/'<<vd.capacity()<<endl;
}
cout<<"-------------------------------"<<endl;
//reserve(n) : 将vector的容量约定为n
vv.reserve(9);
for(int i = 0 ; i < 9 ; ++i ){
vv.push_back(i+0.5);
cout<<vv.size()<<'/'<<vv.capacity()<<endl;
}
for(int i = 0 ; i <= vd.size() ; ++i ){
//vd[i] :访问vd中的第i个元素(从0开始),不进行越界检查
cout<<vd[i]<<' ';
}
cout<<endl;
try{
for(int i = 0 ; i <= vd.size() ; ++i ){
//vd.at(i) :访问vd的第i个元素,进行越界检查
cout<< vd.at(i)<<' ';
}
cout<<endl;
}catch(exception& e){
cout<<"异常: "<<e.what()<<endl;
cout<<"类型: "<<typeid(e).name()<<endl;
}
}
结果如下:
0x371040:1/1
0x3710a8:2/2
0x3710c0:3/4
0x3710c0:4/4
0x3710e8:5/8
0x3710e8:6/8
0x3710e8:7/8
0x3710e8:8/8
0x371130:9/16
-------------------------------
1/9
2/9
3/9
4/9
5/9
6/9
7/9
8/9
9/9
0.1 1.1 2.1 3.1 4.1 5.1 6.1 7.1 8.1 1.30741e+079
0.1 1.1 2.1 3.1 4.1 5.1 6.1 7.1 8.1 异常: vector::_M_range_check
类型: St12out_of_range
2、deque
代码如下:
/*
* deque_1.cpp
*
* Created on: 2013年8月6日
* Author: Administrator
*/
#include <iostream>
#include <deque>
using namespace std;
template <typename T>
void print(T b , T e,char c = ' '){
while( b!= e){
cout<<*b++<<c;
}
cout<<endl;
}
int main(){
deque<char> dc;
dc.push_back(97);dc.push_back('c');
dc.push_front('s');dc.push_front('d');
dc.push_back('k');dc.push_front('$');
print(dc.begin(),dc.end());
dc[1] = 't';
for(int i = 0 ; i < dc.size() ; ++i ){
cout<<dc[i]<<',';
}
cout<<endl;
dc.pop_back();
dc.pop_front();
print(dc.begin(),dc.end());
}
结果如下:
$ d s a c k
$,t,s,a,c,k,
t s a c
3、list
代码如下:
/*
* list_1.cpp
*
* Created on: 2013年8月6日
* Author: Administrator
*/
#include <iostream>
#include <list>
#include <cassert>
using namespace std;
template <typename T>
void print(T b , T e,char c = ' '){
while(b != e){
cout<<*b++<<c;
}
cout<<endl;
}
bool compare(int x , int y){
x %= 3, y %= 3;
return x < y;
}
int main(){
int a[10] = {3,8,8,8,5,5,1,8,8,7};
int b[6] = {9,3,5,2,7,6};
//list<int> li(a,a+10):定义一个list<int>类型的对象li,并进行初始化
list<int> li(a,a+10),lili(b,b+6);
print(li.begin(),li.end());
//unque() : 去除相邻的重复数据
li.unique();
print(li.begin(),li.end());
//sort() :默认从小到大进行排序
li.sort();
print(li.begin(),li.end());
li.unique();
print(li.begin(),li.end());
//reverse() :倒叙
li.reverse();
print(li.begin(),li.end());
//list1.splice(pos,list2) :将list2中的元素一道list1中的pos位置上
li.splice(li.begin(),lili);
print(li.begin(),li.end());
//assert() :断言
assert(lili.empty());
//remove(n) : 删除所有值为n的元素
li.remove(5);
print(li.begin(),li.end());
li.sort();
li.unique();
print(li.begin(),li.end());
lili.push_back(0);
lili.push_back(4);
lili.push_back(7);
lili.push_back(5);
lili.push_back(10);
lili.sort();
print(lili.begin(),lili.end());
//l1.merge(l2) :将l2归并到l1中。(l1、l2必须是有序的)
li.merge(lili);
print(li.begin(),li.end());
lili.assign(b,b+6);
print(lili.begin(),lili.end());
//sort(greater<int>()) :从小到大进行排序
lili.sort(greater<int>());
print(lili.begin(),lili.end());
//sort(compare) :按照自定义的规则进行排序.
lili.sort(compare);
print(lili.begin(),lili.end());
}
结果如下:
3 8 8 8 5 5 1 8 8 7
3 8 5 1 8 7
1 3 5 7 8 8
1 3 5 7 8
8 7 5 3 1
9 3 5 2 7 6 8 7 5 3 1
9 3 2 7 6 8 7 3 1
1 2 3 6 7 8 9
0 4 5 7 10
0 1 2 3 4 5 6 7 7 8 9 10
9 3 5 2 7 6
9 7 6 5 3 2
9 6 3 7 5 2