第二十三模板 18.2列表容器

//第二十三模板 18.2列表容器
//列表容器list是个标准模板库容器类
/*#include <iostream>
#include <list>
using namespace std;
typedef list<int> List;
int main()
{
    List ll;
	List::iterator p; //list类的迭代器方法iterator,并声明了一个迭代器p,可以将其看作是一个归一化的指针
	//也可锦成List::const_iterator p; 
	//const_iterator  p表示迭代器p指向的是一个常量,它的值是不可修改的
	for(int i=1; i<10;++i){
		ll.push_back(i*5);
	}
	for(p=ll.begin(); p!=ll.end(); ++p)
	{
	    cout<<*p<<" ";
	}
	cout<<endl;
	return 0;
}*/
/*
list类还有其它成员函数
assign()    给list赋值
back()      返回最后一个元素
begin()     返回指向第一个元素的迭代器
clear()     删除所有元素
empty()     如果list是空的则返回true
end()       返回末尾的迭代器
erase()     删除一个元素符号
front()     返回第一个元素
get_allocator() 返回list的配置器
insert()    插入一个元素到list中
max_size()  返回list能容红领巾的最大元素数量
merge()     合并两个list
pop_back()  删除最后一个元素
push_back() 在list的末尾添加一个元素
push_front() 在list的头部添加一个元素
rbegin()    返回指向第一个元素的逆向迭代器
remove()    从list删除元素
remove_if() 指指定条件删除元素
rend()      指向list末尾的逆向迭代器
reverse()   把list的元素倒转
size()      返回list中的元素个数
sort()      给list排序
splice()    将第二个list连接到指定位置
swap()      交换两个list
unique()    删除list中重复的元素
*/
/*
#include <iostream>
#include <list>
#include <ostream>
using namespace std;
typedef list<int> List;
void show(List&one, List::iterator pos)
{
	for(pos=one.begin(); pos!=one.end(); ++pos){
	   cout<<*pos<<" ";
	}
}
int main()
{
    List one;
	int num[6]={0,1,2,3,4,5};
	one.insert(one.begin(), num,num+6);
	List::iterator p;
	show(one,p);
	cout<<endl<<"倒转所有元素"<<endl;
	one.reverse();
	show(one,p);
	one.sort();
	cout<<endl<<"按升序排列所有元素"<<endl;

	//创建一个输出流对像pp,它将接受一个int的变量,并以空字符作为间隔符

	//ostream_iterator<int,char>pp(cout," "); //这句是创建一个什么东东
	//copy(one.begin(),one.end(),pp);
	//cout<<endl;

	List two(2);
	cout<<"将list two的所有元素添添加到one的后面"<<endl;
	one.splice(one.end(),two);
	show(one,p);
	//copy(one.begin(),one.end(),pp);
	cout<<endl;
	cout<<endl<<"删除重复元素"<<endl; 
	one.unique();//这里删除重复之后咱还有0 1 2 3 4 5 0呢?
	//unique()为什么不将一前面的0或者5后面的0删除掉呢
	//这是因为unique()函数只能将相邻的重复元素合并为一个

	show(one,p);
	cout<<endl;
	cout<<endl<<"删除为0的元素"<<endl;
	one.remove(0);
	show(one,p);
	cout<<endl;

	cout<<"清空所有元素"<<endl;
	one.clear();
	show(one,p);
	system("pause");
	return 0;
}*/
//注意: insert与splice的区别,insert将list对像的副本插入到目标区域中,而splice则将该对像直接移到目标地址




//第二十三模板 18.3双向队列容器 deque
// 双向队列(deque)和向量(vector)很相似,但是它允许在容器头部和尾部快速插入和删除,它也支持随机访问,但是效率比向量略低
/*
Constructors() 创建一个新双向队列
Operators()    比较和赋值双向队列
assign()       设置双向队列的值
at()           返回指定的元素
back()         返回最后一个元素
begin()        返回第一个元素的迭代器
clear()        清空所有元素
empty()        判断双向队列是否为空(返回true时为空)
end()          返因最末元素的迭代器(实指向最末元素的下一个位置)
erase()        删除指定元素
front()        返回第一个元素
get_allocator()   返回双向队列的内存分配器
insert()        插入元素的双向队列中
max_size()      返回双向列能容纳的最大元素个数
pop_back()      移除最后一元素
pop_front()     删除头部的元素
push_back()     在最后添加一个元素
rbegin()        返回尾部的逆迭代器
rend()          返回起始的逆迭代器

resize()        改变双向队列的大小
size()          返回又向队列中元素的个数
swap()          和另一个双向队交换元素
*/

// 2.4 队列
//队列模板类queue是一个适配器类,前面所学的ostream_iterator模板就是个适配器类,它让输出流能够将迭代器作为接口
//同样,队列模板类queue默认给双向队列容器deque提供队列接口

//什么是队列:
//队列就是像整齐排列在电影院门口等候买票的队,新来人人要排列在队伍的最后面,
//这称为FIFO, 即先入先出 堆栈是LIFO即后进行出
//所有方法如下
/*back()  返回最后一个元素
empty() 如果队列空则返回值
front()  返回第一个元素
pop()    删除第一个元素
push()   在末尾加入一个元素
size()   反队列元素的个数*/
//注意,要删除队首的元素,则需要首先调用front()函数获取第一全元素的信息,然后才能调用pop函数删除该元素,要在队尾加入一个元素,则首先调back()函数返回最后一个元素,然后调用push()函数在队尾加入一个元素



//2.5 优先队列
/*
Priority Queues模板类是另一个适配器类,它支持的操作与队列模板类queue相同
empty() 如果优先队列为空,则返回值
pop()   删除第一个元素
push()  加入一个元素
size()  返回优先队列中拥有的元素的个数
top()   返回优先队列中的最高优先级的元素

*/

//2.6  堆栈类 stack
/*
operator(== <= >= <> !=)  比较和分配堆栈
empty()  堆栈为空则返回真
pop()    移除栈顶元素(弹)
push()   在栈顶增加元素(压)
size()   返回栈中元素数目
top()    返回栈顶元素
*/
/*#include <iostream>
#include <stack>
using namespace std;
int main()
{
	stack<int> s;
	for(int i=0; i<10; i++)
	{
		s.push(i);
		cout<<"当前压入元素为:";
		cout<<"当前椎栈中元素数目前为:"<<s.size()<<endl;
	}
	cout<<endl<<"依次弹出栈栈机元素"<<endl;
	while(!s.empty()){
		cout<<s.top()<<" ";
		s.pop();
	}
	if(s.empty()){
	    cout<<endl<<endl<<"堆栈已空"<<endl;
	}
	system("pause");
    return 0;
}*/

  

posted @ 2012-10-04 20:00  简单--生活  阅读(239)  评论(0编辑  收藏  举报
简单--生活(CSDN)