顺序容器:容器适配器

一、容器适配器的初始化

默认的 stack 和 queue 都基于 deque 容器实现,而 priority_queue 则在 vector 容器上实现。

//1、创建空的容器适配器
void test_adaptor_init()
{
	// stack:
	std::stack<int> stk;
	for ( int i = 0; i != 5; ++i )
	{
		stk.push(i);
	}
	while ( !stk.empty() )
	{
		int num = stk.top();//获取栈顶的值
		std::cout << num << "_";
		stk.pop();//去掉栈顶的值
	}
	std::cout << std::endl << stk.size() << std::endl;

	std::cout << "---------queue----------" << std::endl;
	// queue:
	std::queue<int> que;
	for( int i = 0; i != 5; ++i )
	{
		que.push(i);
	}

	while( !que.empty() )
	{
		int num = que.front();//返回对头的元素
		std::cout << num << "_";
		que.pop();//去掉对头的元素
	}
	std::cout << std::endl << que.size() << std::endl;

	std::cout << "---------priority_queue----------" << std::endl;
	std::priority_queue<int> pq;
	pq.push(1);
	pq.push(2);
	pq.push(3);
	//内存地址:&pq	0x0038f940 [3](3,1,2)
	while ( !pq.empty() )
	{
		std::cout << pq.top() << "_";
		pq.pop();
	}
	std::cout << std::endl << pq.size() << std::endl;
}
//2、以现有的容器作为适配器的初始值
void test_adaptor_init_2()
{
	std::deque<std::string> de;
	de.push_back("123");
	de.push_back("456");
	de.push_back("789");
	
	std::stack<std::string, std::deque<std::string> > stk(de);

	while( stk.size() != 0 )
	{
		std::cout << stk.top() << "_";//789_456_123
		stk.pop();
	}
	std::cout << std::endl;
}

对于给定的适配器,其关联的容器必须满足一定的约束条件。stack 适配器所关联的基础容器可以是任意一种顺序容器类型。因此,stack 栈可以建立在

vector、list 或者 deque 容器之上。而 queue 适配器要求其关联的基础容器必须提供 push_front 运算,因此只能建立在 list 容器上,而不能建立在vector

容器上。priority_queue 适配器要求提供随机访问功能,因此可建立在vector 或 deque 容器上,但不能建立在 list 容器上。






评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值