STL库算法
发表于:2024-12-21 | 分类: C++
字数统计: 509 | 阅读时长: 2分钟 | 阅读量:

STL算法

不修改算法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#include <iostream>
#include <vector>
#include <algorithm> // find, count
#include <numeric> // accumulate

using namespace std;
int main()
{
vector<int> v = {1, 2, 3, 4, 5, 3};

// 1. 查找元素 3
auto it = find(v.begin(), v.end(), 3);
if (it != v.end())
{
cout << "Found: " << *it << endl;
}

// 2. 统计元素 3 的个数
int cnt = count(v.begin(), v.end(), 3);
cout << "Count of 3: " << cnt << endl;

// 3. 累加元素
int sum = accumulate(v.begin(), v.end(), 0);
cout << "Sum: " << sum << endl;

return 0;
}

排序

常用算法及示例:

  • **std::sort**:快速排序。
  • **std::stable_sort**:稳定排序。
  • **std::partial_sort**:部分排序。
  • **std::nth_element**:找到第n小的元素。
  • **std::reverse**:反转序列。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#include <iostream>
#include <vector>
#include <algorithm> // sort, reverse

using namespace std;
int main()
{
vector<int> v = {5, 2, 4, 1, 3};

// 1. 升序排序
sort(v.begin(), v.end());
for (int x : v)
cout << x << " "; // 输出: 1 2 3 4 5
cout << endl;

// 2. 降序排序
sort(v.begin(), v.end(), greater<int>());
for (int x : v)
cout << x << " "; // 输出: 5 4 3 2 1
cout << endl;

// 3. 反转序列
reverse(v.begin(), v.end());
for (int x : v)
cout << x << " "; // 输出: 1 2 3 4 5
cout << endl;

return 0;
}

集合算法

常用算法及示例:

  • **std::set_union**:求并集。
  • **std::set_intersection**:求交集。
  • **std::set_difference**:求差集。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#include <iostream>
#include <vector>
#include <algorithm> // set_union, set_intersection, set_difference
using namespace std;
int main() {
vector<int> v1 = {1, 2, 3, 4, 5};
vector<int> v2 = {3, 4, 5, 6, 7};
vector<int> result;

// 1. 并集
set_union(v1.begin(), v1.end(), v2.begin(), v2.end(), back_inserter(result));
for (int x : result) cout << x << " "; // 输出: 1 2 3 4 5 6 7
cout << endl;

result.clear();

// 2. 交集
set_intersection(v1.begin(), v1.end(), v2.begin(), v2.end(), back_inserter(result));
for (int x : result) cout << x << " "; // 输出: 3 4 5
cout << endl;

result.clear();

// 3. 差集
set_difference(v1.begin(), v1.end(), v2.begin(), v2.end(), back_inserter(result));
for (int x : result) cout << x << " "; // 输出: 1 2
cout << endl;

return 0;
}
上一篇:
RAII
下一篇:
STL容器的有序性与重复性