STL中的序列式容器的特性

15 篇文章 0 订阅

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 



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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

帅气的东哥

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值