一、引言
在C++编程中,标准库容器(STL Containers)是一组用于存储数据的模板类。这些容器类提供了高效且灵活的方式来管理和操作数据,包括序列容器、关联容器和容器适配器。本文将介绍C++标准库中最常用的几种容器的基本用法,包括vector、list、set、map以及stack和queue等容器适配器。
二、序列容器
vector(向量)
vector是一个动态数组,它可以自动管理内存和大小。vector提供了许多成员函数来访问和修改其元素,如push_back()、pop_back()、size()等。
示例:
cpp
|
#include <iostream> |
|
#include <vector> |
|
|
|
int main() { |
|
std::vector<int> vec; |
|
vec.push_back(1); |
|
vec.push_back(2); |
|
vec.push_back(3); |
|
|
|
for (int i = 0; i < vec.size(); ++i) { |
|
std::cout << vec[i] << ' '; |
|
} |
|
// 输出:1 2 3 |
|
|
|
return 0; |
|
} |
list(双向链表)
list是一个双向链表,允许在链表的任何位置插入和删除元素。list提供了许多成员函数来操作其元素,如push_front()、push_back()、remove()等。
示例:
cpp
|
#include <iostream> |
|
#include <list> |
|
|
|
int main() { |
|
std::list<int> lst; |
|
lst.push_front(1); |
|
lst.push_back(2); |
|
lst.push_back(3); |
|
|
|
for (auto it = lst.begin(); it != lst.end(); ++it) { |
|
std::cout << *it << ' '; |
|
} |
|
// 输出:1 2 3 |
|
|
|
return 0; |
|
} |
三、关联容器
set(集合)
set是一个包含唯一元素的集合,它根据元素的键值自动排序。set中的元素不能重复,且插入和删除操作的时间复杂度通常是对数级别的。
示例:
cpp
|
#include <iostream> |
|
#include <set> |
|
|
|
int main() { |
|
std::set<int> s; |
|
s.insert(3); |
|
s.insert(1); |
|
s.insert(2); |
|
|
|
for (auto it = s.begin(); it != s.end(); ++it) { |
|
std::cout << *it << ' '; |
|
} |
|
// 输出:1 2 3 |
|
|
|
return 0; |
|
} |
map(映射)
map是一个关联数组,它允许根据键(key)来存储和检索值(value)。map中的键是唯一的,且键和值之间的关联是持久的。
示例:
cpp
|
#include <iostream> |
|
#include <map> |
|
|
|
int main() { |
|
std::map<std::string, int> m; |
|
m["one"] = 1; |
|
m["two"] = 2; |
|
m["three"] = 3; |
|
|
|
for (const auto& pair : m) { |
|
std::cout << pair.first << ": " << pair.second << std::endl; |
|
} |
|
// 输出:one: 1 |
|
// two: 2 |
|
// three: 3 |
|
|
|
return 0; |
|
} |
四、容器适配器
stack(栈)
stack是一个后进先出(LIFO)的数据结构,它提供了基本的栈操作,如push()、pop()、top()和empty()。stack通常用于需要按特定顺序访问和存储数据的场景。
示例:
cpp
|
#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; |
|
} |
**queue(队列