以下是algorithm库中一些常用的函数:
#include
#include
#include
using namespace std;
bool cmp(string s1, string s2) {
return s1.length() < s2.length();
}
int main() {
// sort函数排序
vector<int> nums1 = { 4, 2, 8, 1, 6, 5, 7, 3 };
sort(nums1.begin(), nums1.end());
cout << "sort函数排序结果:";
for (auto num : nums1) {
cout << num << " ";
}
cout << endl;
// stable_sort函数稳定排序
vector<string> strs = { "bbb", "aa", "cccc", "dd" };
stable_sort(strs.begin(), strs.end(), cmp);
cout << "stable_sort函数排序结果:";
for (auto str : strs) {
cout << str << " ";
}
cout << endl;
// partial_sort函数部分排序
vector<int> nums2 = { 4, 2, 8, 1, 6, 5, 7, 3 };
partial_sort(nums2.begin(), nums2.begin() + 3, nums2.end());
cout << "partial_sort函数排序结果:";
for (auto num : nums2) {
cout << num << " ";
}
cout << endl;
// nth_element函数部分排序
vector<int> nums3 = { 4, 2, 8, 1, 6, 5, 7, 3 };
nth_element(nums3.begin(), nums3.begin() + 5, nums3.end());
cout << "nth_element函数排序结果:";
for (auto num : nums3) {
cout << num << " ";
}
cout << endl;
return 0;
}
#include
#include
#include
using namespace std;
int main() {
vector<int> nums = {5, 2, 8, 4, 1, 9, 3, 6, 7}; // 待查找的向量
int target = 4; // 目标元素
// 使用find函数查找目标元素
auto it = find(nums.begin(), nums.end(), target);
if (it != nums.end()) {
cout << "找到了目标元素,其下标为:" << it - nums.begin() << endl;
} else {
cout << "未找到目标元素" << endl;
}
// 使用find_if函数查找符合条件的第一个元素
auto it2 = find_if(nums.begin(), nums.end(), [](int x){ return x % 2 == 0; });
if (it2 != nums.end()) {
cout << "找到了符合条件的第一个元素,其值为:" << *it2 << endl;
} else {
cout << "未找到符合条件的元素" << endl;
}
// 使用count函数统计某个元素出现的次数
int countt = count(nums.begin(), nums.end(), target);
cout << "目标元素出现的次数为:" << countt << endl;
// 使用binary_search函数在有序区间中查找目标元素
sort(nums.begin(), nums.end()); // 先对向量进行排序
bool found = binary_search(nums.begin(), nums.end(), target);
if (found) {
cout << "在有序区间中找到了目标元素" << endl;
} else {
cout << "在有序区间中未找到目标元素" << endl;
}
return 0;
}
#include
#include
#include
using namespace std;
int main() {
// reverse函数反转一个区间
vector<int> nums1 = { 1, 2, 3, 4, 5 };
reverse(nums1.begin(), nums1.end());
cout << "reverse函数反转结果:";
for (auto num : nums1) {
cout << num << " ";
}
cout << endl;
// rotate函数旋转一个区间
vector<int> nums2 = { 1, 2, 3, 4, 5 };
rotate(nums2.begin(), nums2.begin() + 2, nums2.end());
cout << "rotate函数旋转结果:";
for (auto num : nums2) {
cout << num << " ";
}
cout << endl;
// copy函数将一个区间复制到另一个区间中
vector<int> nums3 = { 1, 2, 3, 4, 5 };
vector<int> nums4(nums3.size());
copy(nums3.begin(), nums3.end(), nums4.begin());
cout << "copy函数复制结果:";
for (auto num : nums4) {
cout << num << " ";
}
cout << endl;
// remove函数将一个区间中符合条件的元素移除
vector<int> nums5 = { 1, 2, 3, 4, 5 };
int val = 3;
auto it = remove(nums5.begin(), nums5.end(), val);
nums5.erase(it, nums5.end());
cout << "remove函数移除结果:";
for (auto num : nums5) {
cout << num << " ";
}
cout << endl;
return 0;
}
#include
#include
#include // 包含 accumulate、inner_product、adjacent_difference、iota 函数
using namespace std;
int main() {
// accumulate函数计算一个区间内所有元素的和
vector<int> nums1 = { 1, 2, 3, 4, 5 };
int sum = accumulate(nums1.begin(), nums1.end(), 0);
cout << "accumulate函数计算结果:" << sum << endl;
// inner_product函数计算两个区间内对应元素的乘积和的和
vector<int> nums2 = { 1, 2, 3, 4, 5 };
vector<int> nums3 = { 2, 3, 4, 5, 6 };
int res = inner_product(nums2.begin(), nums2.end(), nums3.begin(), 0);
cout << "inner_product函数计算结果:" << res << endl;
// adjacent_difference函数计算一个区间内相邻元素的差
vector<int> nums4 = { 1, 2, 6, 4, 5 };
vector<int> diff(nums4.size());
adjacent_difference(nums4.begin(), nums4.end(), diff.begin());
cout << "adjacent_difference函数计算结果:";
for (auto num : diff) {
cout << num << " ";
}
cout << endl;
// iota函数从一个值开始,生成一个连续的区间
vector<int> nums5(5);
iota(nums5.begin(), nums5.end(), 1);
cout << "iota函数生成结果:";
for (auto num : nums5) {
cout << num << " ";
}
cout << endl;
return 0;
}
#include
#include
#include
using namespace std;
// for_each:对一个区间内的每个元素执行一个函数
void print(int x) {
cout << x << " ";
}
void test_for_each() {
vector<int> nums = { 1, 2, 3, 4, 5 };
cout << "原始序列:";
for_each(nums.begin(), nums.end(), print);
cout << endl;
cout << "使用for_each函数输出每个元素:";
for_each(nums.begin(), nums.end(), [](int x) {cout << x << " "; });
cout << endl;
}
// unique:移除一个区间中相邻的重复元素
void test_unique() {
vector<int> nums = { 1, 1, 2, 2, 3, 4, 4, 5 };
cout << "原始序列:";
for_each(nums.begin(), nums.end(), print);
cout << endl;
auto new_end = unique(nums.begin(), nums.end());
cout << "移除重复元素后的序列:";
for_each(nums.begin(), new_end, print);
cout << endl;
}
// max、min:求出一个区间内的最大、最小元素
void test_max_min() {
vector<int> nums = { 1, 2, 3, 4, 5 };
cout << "原始序列:";
for_each(nums.begin(), nums.end(), print);
cout << endl;
cout << "最大值为:" << *max_element(nums.begin(), nums.end()) << endl;
cout << "最小值为:" << *min_element(nums.begin(), nums.end()) << endl;
}
// next_permutation、prev_permutation:求出一个区间内的下一个/上一个排列
void test_permutation() {
vector<int> nums = { 1, 2, 3 };
cout << "原始序列:";
for_each(nums.begin(), nums.end(), print);
cout << endl;
// 求出下一个排列
next_permutation(nums.begin(), nums.end());
cout << "下一个排列为:";
for_each(nums.begin(), nums.end(), print);
cout << endl;
// 求出上一个排列
prev_permutation(nums.begin(), nums.end());
cout << "上一个排列为:";
for_each(nums.begin(), nums.end(), print);
cout << endl;
}
int main() {
test_for_each();
test_unique();
test_max_min();
test_permutation();
return 0;
}
需要注意的是,以上仅列举了部分常用的函数,algorithm库中还有许多其他函数。在实际使用时,可以根据具体的需求来选择合适的函数,并结合其他STL容器、迭代器等工具来完成具体的任务。