由于queue和stack在c++中的函数大差不差,但是仍有一些差别,为了准确记忆,于是有了这篇blog
顺便对比了unordered_map
| 数据结构 | 初始化方式 | 常用函数 | 说明 |
|---|---|---|---|
| 队列 (queue) | #include <queue>std::queue<int> q; queue<TreeNode*> q | q.push(x):将元素x加入队列尾部q.pop():移除队列头部元素q.front():返回队列头部元素q.back():返回队列尾部元素q.empty():判断队列是否为空q.size():返回队列中元素的数量 | 队列是FIFO(先进先出)的数据结构,只能在队尾插入,队头删除。 |
| 栈 (stack) | #include <stack>std::stack<int> s; | s.push(x):将元素x压入栈顶s.pop():移除栈顶元素s.top():返回栈顶元素s.empty():判断栈是否为空s.size():返回栈中元素的数量 | 栈是LIFO(后进先出)的数据结构,只能在栈顶插入和删除。 |
| unordered_map | #include <unordered_map>std::unordered_map<std::string, int> umap; | umap[key] = value:插入或更新键值对umap.insert({key, value}):插入键值对umap.find(key):查找键,返回迭代器umap.erase(key):删除键值对umap.empty():判断是否为空umap.size():返回键值对数量umap.count(key):返回键是否存在(0或1) | unordered_map是基于哈希表的关联容器,键值对无序存储,查找效率为O(1)。 |
示例代码
队列 (queue)
#include <iostream>
#include <queue>
int main() {
std::queue<int> q;
q.push(10); // 队列: [10]
q.push(20); // 队列: [10, 20]
q.push(30); // 队列: [10, 20, 30]
std::cout << "Front: " << q.front() << std::endl; // 输出: 10
std::cout << "Back: " << q.back() << std::endl; // 输出: 30
q.pop(); // 队列: [20, 30]
std::cout << "Size: " << q.size() << std::endl; // 输出: 2
return 0;
}
栈 (stack)
#include <iostream>
#include <stack>
int main() {
std::stack<int> s;
s.push(10); // 栈: [10]
s.push(20); // 栈: [10, 20]
s.push(30); // 栈: [10, 20, 30]
std::cout << "Top: " << s.top() << std::endl; // 输出: 30
s.pop(); // 栈: [10, 20]
std::cout << "Size: " << s.size() << std::endl; // 输出: 2
return 0;
}
unordered_map
#include <iostream>
#include <unordered_map>
int main() {
std::unordered_map<std::string, int> umap;
umap["apple"] = 5; // 插入键值对
umap["banana"] = 3;
umap.insert({"orange", 2}); // 另一种插入方式
if (umap.find("banana") != umap.end()) {
std::cout << "Banana count: " << umap["banana"] << std::endl; // 输出: 3
}
std::cout << "Size: " << umap.size() << std::endl; // 输出: 3
return 0;
}
273

被折叠的 条评论
为什么被折叠?



