📜  <numeric>C++ STL中的库(1)

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

C++ STL中的库

C++标准库是C++语言的核心支持库,包含对于操作系统、文件系统、输入输出、容器、算法、数值、时间、正则表达式等方面的支持。STL(Standard Template Library)是C++标准库其中一个组成部分,提供了许多常用的容器、算法、迭代器等。

容器

STL提供了多种容器类,包括数组、向量、链表、栈、队列、集合、映射和多重集合等。

数组

数组是一种静态容器,其大小在编译时指定,不能动态增加或缩小。STL提供了 array 模板类作为数组容器。

#include <array>

std::array<int, 5> arr = {1, 2, 3, 4, 5};
向量

向量是一种动态容器,其大小可以动态增加或缩小。STL提供了 vector 模板类作为向量容器。

#include <vector>

std::vector<int> vec = {1, 2, 3, 4, 5};
vec.push_back(6);
链表

链表是一种常见的数据结构,STL提供了 list 模板类作为链表容器。

#include <list>

std::list<int> lst = {1, 2, 3, 4, 5};
lst.push_back(6);
栈和队列

栈和队列是两种常用的数据结构,STL提供了 stackqueue 模板类作为栈和队列容器。

#include <stack>
#include <queue>

std::stack<int> stk;
stk.push(1);
stk.push(2);

std::queue<int> q;
q.push(1);
q.push(2);
集合和映射

集合和映射是两种常用的关联容器,STL提供了 setmap 模板类作为集合和映射容器。

#include <set>
#include <map>

std::set<int> s = {1, 2, 3, 4, 5};
s.insert(6);

std::map<int, std::string> m = {{1, "one"}, {2, "two"}};
m.insert({3, "three"});
算法

STL提供了许多常见的算法,包括查找、排序、合并、复制等等。

#include <algorithm>
#include <vector>

std::vector<int> vec = {3, 2, 1, 4, 5};

// 查找
auto it = std::find(vec.begin(), vec.end(), 4);

// 排序
std::sort(vec.begin(), vec.end());

// 合并
std::vector<int> vec2 = {6, 7, 8};
std::vector<int> vec3;
std::merge(vec.begin(), vec.end(), vec2.begin(), vec2.end(), std::back_inserter(vec3));

// 复制
std::vector<int> vec4(vec3.size());
std::copy(vec3.begin(), vec3.end(), vec4.begin());
迭代器

迭代器是STL的一个重要概念,它提供了一种统一的方式来访问容器的元素。STL提供了多种迭代器,包括随机访问迭代器、双向迭代器、前向迭代器等等。

#include <vector>

std::vector<int> vec = {1, 2, 3};

// 随机访问迭代器
auto it1 = vec.begin();
it1++;
it1 = it1 + 2;

// 双向迭代器
auto it2 = vec.rbegin();
it2++;

// 前向迭代器
auto it3 = vec.begin();
it3++;
数值

STL提供了一些数值处理的函数和类,包括数学函数、随机数生成、复数等等。

#include <cmath>
#include <random>
#include <complex>

// 数学函数
std::sqrt(2);
std::sin(3.14);

// 随机数生成
std::default_random_engine eng;
std::uniform_int_distribution<int> dist(1, 6);
dist(eng);

// 复数
std::complex<double> z(1, 2);
时间

STL提供了一些时间处理的函数和类,包括时间获取、时间转换、时间间隔计算等等。

#include <chrono>

// 时间获取
auto now = std::chrono::system_clock::now();

// 时间转换
auto t1 = std::chrono::system_clock::to_time_t(now);

// 时间间隔计算
auto start = std::chrono::high_resolution_clock::now();
// code to time
auto end = std::chrono::high_resolution_clock::now();
auto elapsed = std::chrono::duration_cast<std::chrono::microseconds>(end - start);