顺序容器:容器适配器

一、容器适配器的初始化

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

//1、创建空的容器适配器
void test_adaptor_init()
{
	// stack:
	std::stack 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 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 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 de;
	de.push_back("123");
	de.push_back("456");
	de.push_back("789");
	
	std::stack > 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 容器上。






你可能感兴趣的:(c++,primer,fourth,edition)