一、容器适配器的初始化
默认的 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 容器上。