📜  C++ STL中的库(1)

📅  最后修改于: 2023-12-03 14:39:53.040000             🧑  作者: Mango

C++ STL中的库

C++ STL(标准模板库)是一个强大的 C++ 库,提供了一系列通用的数据结构和算法,可以大大简化代码的编写。本文将重点介绍其中几个常用的库。

1. vector

vector 是一种动态数组,是 C++ STL 中最常用的一种容器。它的主要特点是支持快速的随机访问、在尾部插入和删除元素以及自动扩容。

#include <vector>

std::vector<int> vec;

// 在尾部插入元素
vec.push_back(10);
vec.push_back(20);

// 访问元素
std::cout << vec[0] << std::endl; // 10

// 遍历数组
for (auto x : vec) {
    std::cout << x << " ";
}
// 输出:10 20

// 删除尾部元素
vec.pop_back();
2. list

list 是一种双向链表。它的主要特点是支持在任意位置插入和删除元素,但是不支持随机访问。

#include <list>

std::list<int> li;

// 在尾部插入元素
li.push_back(10);
li.push_back(20);

// 在任意位置插入元素
auto it = li.begin();
++it;
li.insert(it, 15);

// 遍历链表
for (auto x : li) {
    std::cout << x << " ";
}
// 输出:10 15 20

// 删除任意位置的元素
it = li.begin();
++it;
li.erase(it);
3. set

set 是一种集合,其中的元素按照一定的顺序排列,且不含重复元素。

#include <set>

std::set<int> s;

// 插入元素
s.insert(10);
s.insert(20);
s.insert(10); // 这个元素不会被插入,因为有重复元素

// 遍历集合
for (auto x : s) {
    std::cout << x << " ";
}
// 输出:10 20

// 查找元素
auto it = s.find(10);
if (it != s.end()) {
    std::cout << "元素找到了!" << std::endl;
}

// 删除元素
s.erase(20);
4. map

map 是一种顺序映射,将某种类型的键映射到另一种类型的值上,且键不含重复元素。

#include <map>

std::map<std::string, int> mp;

// 插入键值对
mp["Alice"] = 20;
mp["Bob"] = 30;
mp["Alice"] = 40; // 这里会用新的值覆盖原来的值

// 遍历 map 中的键值对
for (auto p : mp) {
    std::cout << p.first << " " << p.second << std::endl;
}
// 输出:Alice 40
//      Bob   30

// 查找键对应的值
auto it = mp.find("Alice");
if (it != mp.end()) {
    std::cout << "Alice 的值为:" << it->second << std::endl;
}

// 删除键值对
mp.erase("Alice");

以上介绍的仅仅是 C++ STL 中的一小部分,还有很多其他的库和算法可以使用。使用 STL 能够大大提高代码的效率和可读性,同时也能使代码更加简洁、更易维护。