C++的标准模板库(STL)提供了一组通用的模板类,方便程序员以高效和灵活的方式管理数据。STL中的容器是其核心组成部分,包括序列容器、关联容器和无序容器等多种类型。本文将详细介绍十种常用的STL容器,并通过示例代码展示其基本用法。
1. 向量(vector)
vector
是一个动态数组,能够自动调整大小,允许随机访问。
#include <iostream>
#include <vector>
int main() {
std::vector<int> vec = {1, 2, 3, 4, 5};
vec.push_back(6); // 添加元素
for (int v : vec) {
std::cout << v << " "; // 输出:1 2 3 4 5 6
}
return 0;
}
2. 列表(list)
list
是一个双向链表,比vector
更高效的插入和删除操作。
#include <iostream>
#include <list>
int main() {
std::list<int> lst = {1, 2, 3, 4, 5};
lst.push_back(6); // 添加元素
lst.remove(3); // 删除元素
for (int l : lst) {
std::cout << l << " "; // 输出:1 2 4 5 6
}
return 0;
}
3. 双端队列(deque)
deque
是一个双端队列,支持在两端快速插入和删除。
#include <iostream>
#include <deque>
int main() {
std::deque<int> deq = {1, 2, 3, 4, 5};
deq.push_front(0); // 在前端添加元素
deq.push_back(6); // 在后端添加元素
for (int d : deq) {
std::cout << d << " "; // 输出:0 1 2 3 4 5 6
}
return 0;
}
4. 栈(stack)
stack
是一个后进先出(LIFO)的数据结构。
#include <iostream>
#include <stack>
int main() {
std::stack<int> stk;
stk.push(1);
stk.push(2);
stk.push(3);
while (!stk.empty()) {
std::cout << stk.top() << " "; // 输出:3 2 1
stk.pop();
}
return 0;
}
5. 队列(queue)
queue
是一个先进先出(FIFO)的数据结构。
#include <iostream>
#include <queue>
int main() {
std::queue<int> que;
que.push(1);
que.push(2);
que.push(3);
while (!que.empty()) {
std::cout << que.front() << " "; // 输出:1 2 3
que.pop();
}
return 0;
}
6. 集合(set)
set
是一个存储唯一元素的容器,元素会自动排序。
#include <iostream>
#include <set>
int main() {
std::set<int> s = {1, 2, 3, 4, 5};
s.insert(3); // 插入重复元素会被忽略
for (int e : s) {
std::cout << e << " "; // 输出:1 2 3 4 5
}
return 0;
}
7. 有序集合(multiset)
multiset
允许存储重复元素。
#include <iostream>
#include <set>
int main() {
std::multiset<int> ms = {1, 2, 2, 3, 4};
ms.insert(2); // 可以插入重复元素
for (int e : ms) {
std::cout << e << " "; // 输出:1 2 2 2 3 4
}
return 0;
}
8. 映射(map)
map
存储键值对,键唯一,值可以重复,自动排序。
#include <iostream>
#include <map>
int main() {
std::map<int, std::string> m;
m[1] = "one";
m[2] = "two";
for (const auto& pair : m) {
std::cout << pair.first << ": " << pair.second << " "; // 输出:1: one 2: two
}
return 0;
}
9. 无序映射(unordered_map)
unordered_map
是基于哈希表实现的映射,无序存储。
#include <iostream>
#include <unordered_map>
int main() {
std::unordered_map<int, std::string> um;
um[1] = "one";
um[2] = "two";
for (const auto& pair : um) {
std::cout << pair.first << ": " << pair.second << " "; // 输出顺序无固定性
}
return 0;
}
10. 优先队列(priority_queue)
priority_queue
是一个优先级队列,存储的元素会根据优先级自动排序。
#include <iostream>
#include <queue>
int main() {
std::priority_queue<int> pq;
pq.push(1);
pq.push(3);
pq.push(2);
while (!pq.empty()) {
std::cout << pq.top() << " "; // 输出:3 2 1
pq.pop();
}
return 0;
}
总结
C++ STL 提供的容器种类繁多,每种都有其适用的场景。选择合适的容器能够显著提升程序的效率与可维护性。在实际开发中,理解各种容器的特点与用法,将帮助开发者更高效地进行数据处理。希望本文的介绍能够为你的 C++ 编程之路提供帮助。