C++ 标准库
C++ 标准库
C++标准库(C++ Standard Library)是C++语言的一部分,提供了一组丰富的工具和组件,涵盖了各种编程需求。标准库由以下几个主要部分组成:
1.标准模板库(STL)
STL提供了常用的数据结构和算法,分为以下几个部分:
容器
1 | <array>: 定长数组容器 |
迭代器
1 | <iterator>: 迭代器 |
算法
1 | <algorithm>: 常用算法(如排序、查找等) |
2.输入输出
1 | <iostream>: 标准输入输出流 |
3.函数对象和绑定
1 | <functional>: 定义函数对象及相关工具 |
4.数学和数值运算
1 | <numeric>: 数值操作(如累计、乘积等) |
5.字符串和正则表达式
1 | <string>: 标准字符串类 |
6.时间和日期
1 | <ctime>: 时间处理 |
7.多线程和并发
1 | <thread>: 多线程支持 |
8.内存管理
1 | <memory>: 智能指针及动态内存管理 |
9.异常处理
1 | <exception>: 异常处理基类及相关工具 |
10.其他工具
1 | <utility>: 通用工具(如 std::pair 和 std::move 等) |
一、include <functional>
1.1. 标准函数对象
<functional>
提供了一组预定义的函数对象(也称为仿函数,它的行为类似于函数,可以像调用函数一样调用它),主要用于函数式编程和容器操作。这些函数对象都在 std
命名空间中。
算术操作
std::plus
: 加法std::minus
: 减法std::multiplies
: 乘法std::divides
: 除法std::modulus
: 取模std::negate
: 取负
用法示例:1
2
3
4
5
6
7
8
9
10
11
12
int main() {
std::plus<int> add;
std::cout << "3 + 4 = " << add(3, 4) << std::endl;
std::negate<int> negate;
std::cout << "Negate 5 = " << negate(5) << std::endl;
return 0;
}
比较操作
std::equal_to
: 等于std::not_equal_to
: 不等于std::greater
: 大于std::less
: 小于std::greater_equal
: 大于等于std::less_equal
: 小于等于
逻辑操作
std::logical_and
: 逻辑与std::logical_or
: 逻辑或std::logical_not
: 逻辑非
1.2. 函数对象包装器
std::function
- 是一个通用的、多态的函数包装器,可以存储可调用对象(函数、函数指针、lambda 表达式、函数对象等)。
- 用法示例:
1
2
3
4
5
6
7
8
9
10
11
12
void printMessage(const std::string& message) {
std::cout << message << std::endl;
}
int main() {
std::function<void(const std::string&)> func = printMessage;
func("Hello, <functional>!");
return 0;
}
std::bind
- 创建一个新的函数对象,将部分参数绑定到已有函数或可调用对象上。
- 用法示例:
1
2
3
4
5
6
7
8
9
10
11
12
void greet(const std::string& name, const std::string& greeting) {
std::cout << greeting << ", " << name << "!" << std::endl;
}
int main() {
auto sayHello = std::bind(greet, std::placeholders::_1, "Hello");
sayHello("Alice"); // 输出:Hello, Alice!
return 0;
}
std::placeholders
- 用于占位符(
_1
,_2
, …),在使用std::bind
时指定参数的位置。
1.3. 哈希支持
std::hash
- 用于生成哈希值的函数对象,常用于哈希容器如
std::unordered_map
和std::unordered_set
。 - 示例:
1
2
3
4
5
6
7
8
9
10
11
int main() {
std::hash<std::string> hashFunc;
std::string key = "hello";
std::cout << "Hash value for '" << key << "': " << hashFunc(key) << std::endl;
return 0;
}
1.4. 常见使用场景
- 函数回调:用
std::function
包装回调函数,方便传递和调用。 - 绑定参数:使用
std::bind
将部分参数绑定,生成更简单的函数接口。 - 容器操作:结合算法(如
std::sort
)与标准函数对象(如std::less
)实现复杂排序。
后面碰到了再学习。。。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 十柒!
评论