【入门级-C++程序设计:13、STL模板:常用函数与算法模板(min、max、swap、sort)】

C++标准库,C++ Standard Library(STL),是类库和函数的集合,其使用核心语言写成,由c++标准委员会制定,并不断维护更新。 是 C++ 语言的核心组成部分,提供了丰富的预定义功能,包括容器、算法、字符串处理、输入/输出操作等。

模板是C++泛型编程的基础,允许编写与类型无关的代码。STL的所有组件均基于模板实现,例如:
类模板:定义通用的数据结构(如 vector)。
函数模板:定义通用的算法(如 sort())。

C++标准库提供了许多常用的函数模板和算法模板,例如 min、max、swap 和 sort,它们可以简化代码并提高开发效率。以下是它们的详细用法和示例:

1、函数模板min 和 max介绍
(1)基本形式(比较两个值)
template
constexpr const T& min(const T& a, const T& b); //返回 a 和 b 中的较小值。
constexpr const T& man(const T& a, const T& b); //返回 a 和 b 中的较大值。
功能:比较 a 和 b,返回较小的值。
举例说明:
int a = 5, b = 3;
cout << min(a, b) << endl; // 输出 3
cout << max(a, b) << endl; // 输出 5

(2)使用自定义比较函数
template <class T, class Compare>
constexpr const T& min(const T& a, const T& b, Compare comp);
constexpr const T& man(const T& a, const T& b, Compare comp);
功能:用自定义的比较函数 comp 代替默认的 < 运算符。
举例说明:
#include // C++标准库
int a = 5, b = 3;
自定义比较函数
auto comp = [](int x, int y) { return abs(x) < abs(y); };
cout << min(-2, 3, comp) << endl; // 输出 -2(按绝对值比较)
函数 comp用户可以根据情况自行进行定义,这里举例定义的是绝对值比较,你也可以定义大小比较,字符长度比较等等,都可以的,不要拘泥于此。

(3)初始化列表(多值比较)
template
constexpr T min(std::initializer_list ilist);
constexpr T man(std::initializer_list ilist);
功能:比较初始化列表中的所有元素,返回最小值。
举例说明:
cout << min({1, 2, 3, 4}) << endl; // 输出 1
cout << max({1, 2, 3, 4}) << endl; // 输出 4

(4)初始化列表(多值比较) + 自定义比较函数
template <class T, class Compare>
constexpr T min(std::initializer_list ilist, Compare comp);
功能:用自定义的比较函数 comp 比较初始化列表中的元素。
举例说明:
按字符串长度比较
auto len_comp = [](const std::string& s1, const std::string& s2) {
return s1.length() < s2.length();
};
std::cout << std::min({“apple”, “banana”, “cherry”}, len_comp) << std::endl; // 输出 “apple”(长度最短)
函数len_comp的功能是比较字符串的长度,取得长度小的字符串。

2、函数模板swap(交换两个值)介绍
功能:交换两个变量的值(支持基本类型、STL容器、自定义类型)。

基本用法
#include // C++标准库
int x = 1, y = 2;
swap(x, y); // x=2, y=1

交换容器
vector v1 = {1, 2}, v2 = {3, 4};
swap(v1, v2); // v1={3,4}, v2={1,2}

自定义类型的 swap
struct Point { int x, y; };
Point p1{1, 2}, p2{3, 4};
swap(p1, p2); // 交换 p1 和 p2 的所有成员

3、函数模板sort(排序)介绍
功能:对数组或容器(如 vector)进行排序。

默认升序,支持自定义比较函数。
#include // C++标准库
vector v = {4, 2, 5, 1};
sort(v.begin(), v.end()); // v={1, 2, 4, 5}

降序排序
sort(v.begin(), v.end(), greater()); // v={5, 4, 2, 1}

自定义排序规则
// 按字符串长度排序
vector words = {“apple”, “banana”, “cherry”};
sort(words.begin(), words.end(), [](const string& a, const string& b) {
return a.size() < b.size();
});
// words={“apple”, “cherry”, “banana”}

对结构体排序
struct Student {
string name;
int score;
};
vector students = {{“Tom”, 90}, {“Bob”, 80}};
sort(students.begin(), students.end(), [](const Student& a, const Student& b) {
return a.score > b.score; // 按分数降序
});

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

papership

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值