C++ queue(STL queue) 一些操作
queue 容器可以用来表示超市的结账队列或服务器上等待执行的数据库事务队列。
只能访问 queue 容器适配器的第一个和最后一个元素。只能在容器的末尾添加新元素,只能从头部移除元素。
queue 和 stack 有一些成员函数相似,但在一些情况下,工作方式有些不同:
front():返回 queue 中第一个元素的引用。如果 queue 是常量,就返回一个常引用;如果 queue 为空,返回值是未定义的。
back():返回 queue 中最后一个元素的引用。如果 queue 是常量,就返回一个常引用;如果 queue 为空,返回值是未定义的。
push(const T& obj):在 queue 的尾部添加一个元素的副本。这是通过调用底层容器的成员函数 push_back() 来完成的。
push(T&& obj):以移动的方式在 queue 的尾部添加元素。这是通过调用底层容器的具有右值引用参数的成员函数 push_back() 来完成的。
pop():删除 queue 中的第一个元素。
size():返回 queue 中元素的个数。
empty():如果 queue 中没有元素的话,返回 true。
emplace():用传给 emplace() 的参数调用 T 的构造函数,在 queue 的尾部生成对象。
swap(queue &other_q):将当前 queue 中的元素和参数 queue 中的元素交换。它们需要包含相同类型的元素。也可以调用全局函数模板 swap() 来完成同样的操作。
(详细的queue介绍)
///BFS合并二叉树,利用stl<queue>
class Solution {
public:
TreeNode* mergeTrees(TreeNode* t1, TreeNode* t2) {
if (!t1 || !t2)
return t1==nullptr? t2 : t1;
TreeNode* ans = t1;
queue<TreeNode*> q;//创建队列容器
q.push(t1); q.push(t2);//入队
while (!q.empty()) {
t1 = q.front(); q.pop();//front返回第一个,pop删除
t2 = q.front(); q.pop();
t1->val += t2->val;
if (t1->left && t2->left) {
q.push(t1->left);
q.push(t2->left);
}
else if (!t1->left) {
t1->left = t2->left;
}
if (t1->right && t2->right) {
q.push(t1->right);
q.push(t2->right);
}
else if (!t1->right) {
t1->right = t2->right;
}
}
return ans;
}
};