目录
1.sort() 【排序】
接收两个参数:first,last,即排序的起始位置和终止位置,该函数默认从小到大排序,
若想按照自己的方式排序(如从大到小排序),可以在函数中加入第三个参数cmp:
例:
#include <iostream>
#include <vector>
#include <algorithm>
bool cmp(int a, int b) {
return a > b;
}
int main() {
std::vector<int> numbers = {3, 1, 4, 1, 5, 9, 2, 6, 5};
std::sort(numbers.begin(), numbers.end(), cmp);
for (int num : numbers) {
std::cout << num << " ";
}
std::cout << std::endl;
return 0;
}
2.reverse() 【逆序】
接收两个参数:同sort()函数一样,接收first和last两个参数,用于实现first至last范围内元素的逆序操作。它会将容器中的元素按照相反的顺序重新排列,即将第一个元素与最后一个元素交换,第二个元素与倒数第二个元素交换,以此类推,直到所有元素都被重新排列
例:
#include <iostream>
#include <vector>
#include <algorithm>
int main() {
std::vector<int> numbers = {1, 2, 3, 4, 5};
std::reverse(numbers.begin(), numbers.end());
for (int num : numbers) {
std::cout << num << " ";
}
std::cout << std::endl;
//输出5 4 3 2 1
return 0;
}
3.merge() 【合并】
该函数接收5个参数:first_1,last_1,first_2,last_2,合并结果的目标位置
该函数用于将两个已排序的序列合并成一个新的有序序列。这个函数通常用于合并两个有序的容器,比如两个已排序的向量或双端队列
例:
#include <iostream>
#include <vector>
#include <algorithm>
int main() {
std::vector<int> vec1 = {1, 3, 5, 7, 9};
std::vector<int> vec2 = {2, 4, 6, 8, 10};
std::vector<int> merged(vec1.size() + vec2.size());
std::merge(vec1.begin(), vec1.end(), vec2.begin(), vec2.end(), merged.begin());
for (int num : merged) {
std::cout << num << " ";
}
std::cout << std::endl;
//输出1 2 3 4 5 6 7 8 9 10
return 0;
}
在这个程序中,由于输入序列已经排序,因此合并过程中只需要线性时间,时间复杂度为 O(n)
4.partial_sort() 【部分排序】
传入三个参数:容器起始位置first,排序的终止位置end,容器终止位置last
该函数用于部分排序一个序列,即将序列中的部分元素排列到前面,使它们按照顺序排列,而不对整个序列进行排序。这个函数在需要找到前 k 个最小(或最大)元素时非常有用,而不需要对整个序列进行排序
例:
#include <iostream>
#include <vector>
#include <algorithm>
int main() {
std::vector<int> vec = {5, 2, 9, 1, 7, 3, 8, 6, 4};
std::partial_sort(vec.begin(), vec.begin() + 4, vec.end());
for (int num : vec) {
std::cout << num << " ";
}
std::cout << std::endl;
//输出1 2 3 4 7 5 8 6 9
return 0;
}
同sort()函数一样,该函数默认从小到大排序,但同样可以加入第四个参数cmp,以自定义方式排序。
5.partition() 【分割】
该函数接收三个参数:起始位置first,终止位置last,判断方式
该函数用于对容器中的元素进行分区,将满足特定条件的元素移动到容器的前部,而不满足条件的元素移动到容器的后部。
例:
#include <iostream>
#include <vector>
#include <algorithm>
int main() {
std::vector<int> vec = {5, 2, 9, 1, 7, 3, 8, 6, 4};
// 将偶数移动到容器前部
std::partition(vec.begin(), vec.end(), [](int i) { return i % 2 == 0; });
for (int num : vec) {
std::cout << num << " ";
}
std::cout << std::endl;
//输出4 2 8 6 7 3 5 1 9
return 0;
}
该函数在需要对容器中的元素进行分割,使得满足某种条件的元素和不满足条件的元素分别位于容器的两个部分时非常有用。
--------------------------------------------------------------------------------------------------------------------------------
觉得有用就点点关注收藏一下吧~谢谢支持!