📅  最后修改于: 2023-12-03 15:13:57.088000             🧑  作者: Mango
C++ STL中提供了许多方便高效的数组算法,其中一些常用的算法包括:all_of、any_of、none_of、copy_n 和 iota。在本文中,我们将详细介绍这些算法的用法和示例。
all_of
算法用于检查给定范围内的所有元素是否均满足某一条件,如果都满足,则返回 true
,否则返回 false
。
template<class InputIt, class UnaryPredicate>
bool all_of(InputIt first, InputIt last, UnaryPredicate p);
其中,first
和 last
分别为指向范围起始和终止位置的迭代器,p
为 unary predicate 函数,用于检查指针所指元素是否满足条件。
例如,我们可以使用 all_of
算法检查一个整型数组中的所有元素是否都是正数。
#include <iostream>
#include <algorithm>
#include <array>
int main() {
std::array<int, 5> arr = {1, 2, 3, 4, 5};
if (std::all_of(arr.begin(), arr.end(), [](int i){ return i > 0; })) {
std::cout << "All numbers are positive.\n";
} else {
std::cout << "There are some non-positive numbers.\n";
}
return 0;
}
输出结果为:All numbers are positive.
any_of
算法用于检查给定范围内是否存在至少一个元素满足某一条件,如果存在,则返回 true
,否则返回 false
。
template<class InputIt, class UnaryPredicate>
bool any_of(InputIt first, InputIt last, UnaryPredicate p);
与 all_of
算法类似,first
和 last
分别为指向范围起始和终止位置的迭代器,p
为 unary predicate 函数,用于检查指针所指元素是否满足条件。
例如,我们可以使用 any_of
算法检查一个整型数组中是否存在奇数。
#include <iostream>
#include <algorithm>
#include <array>
int main() {
std::array<int, 5> arr = {1, 2, 3, 4, 5};
if (std::any_of(arr.begin(), arr.end(), [](int i){ return i % 2 == 1; })) {
std::cout << "There is at least one odd number.\n";
} else {
std::cout << "There is no odd number.\n";
}
return 0;
}
输出结果为:There is at least one odd number.
none_of
算法用于检查给定范围内的所有元素是否都不满足某一条件,如果都不满足,则返回 true
,否则返回 false
。
template<class InputIt, class UnaryPredicate>
bool none_of(InputIt first, InputIt last, UnaryPredicate p);
同样地,first
和 last
分别为指向范围起始和终止位置的迭代器,p
为 unary predicate 函数,用于检查指针所指元素是否满足条件。
例如,我们可以使用 none_of
算法检查一个整型数组中是否存在负数。
#include <iostream>
#include <algorithm>
#include <array>
int main() {
std::array<int, 5> arr = {1, 2, 3, 4, 5};
if (std::none_of(arr.begin(), arr.end(), [](int i){ return i < 0; })) {
std::cout << "There is no negative number.\n";
} else {
std::cout << "There is at least one negative number.\n";
}
return 0;
}
输出结果为:There is no negative number.
copy_n
算法用于将给定范围内的前 n 个元素复制到目标位置,其中 n 由用户设定。
template<class InputIt, class Size, class OutputIt>
OutputIt copy_n(InputIt first, Size count, OutputIt result);
其中,first
为指向源范围起始位置的迭代器,count
为要复制的元素数目,result
为指向目标范围起始位置的迭代器。
例如,我们可以使用 copy_n
算法将一个整型数组的前三个元素复制到另一个数组中。
#include <iostream>
#include <algorithm>
#include <array>
int main() {
std::array<int, 5> arr1 = {1, 2, 3, 4, 5};
std::array<int, 3> arr2;
std::copy_n(arr1.begin(), 3, arr2.begin());
for (int i : arr2) {
std::cout << i << " ";
}
std::cout << "\n";
return 0;
}
输出结果为:1 2 3
iota
算法用于在给定范围内连续生成一组数字,起始数字由用户设定。
template<class ForwardIt, class T>
void iota(ForwardIt first, ForwardIt last, T value);
其中,first
和 last
分别为指向范围起始和终止位置的迭代器,value
为起始数字。
例如,我们可以使用 iota
算法生成一个包含 5 个连续数字的整型数组。
#include <iostream>
#include <algorithm>
#include <array>
int main() {
std::array<int, 5> arr;
std::iota(arr.begin(), arr.end(), 1); // 从 1 开始生成
for (int i : arr) {
std::cout << i << " ";
}
std::cout << "\n";
return 0;
}
输出结果为:1 2 3 4 5
以上就是 C++ STL 中的数组算法介绍,希望对您有用。