📜  C++ STL中的数组算法(all_of,any_of,none_of,copy_n和iota)(1)

📅  最后修改于: 2023-12-03 15:13:57.088000             🧑  作者: Mango

C++ STL中的数组算法介绍

C++ STL中提供了许多方便高效的数组算法,其中一些常用的算法包括:all_of、any_of、none_of、copy_n 和 iota。在本文中,我们将详细介绍这些算法的用法和示例。

all_of

all_of 算法用于检查给定范围内的所有元素是否均满足某一条件,如果都满足,则返回 true,否则返回 false

template<class InputIt, class UnaryPredicate>
bool all_of(InputIt first, InputIt last, UnaryPredicate p);

其中,firstlast 分别为指向范围起始和终止位置的迭代器,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

any_of 算法用于检查给定范围内是否存在至少一个元素满足某一条件,如果存在,则返回 true,否则返回 false

template<class InputIt, class UnaryPredicate>
bool any_of(InputIt first, InputIt last, UnaryPredicate p);

all_of 算法类似,firstlast 分别为指向范围起始和终止位置的迭代器,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

none_of 算法用于检查给定范围内的所有元素是否都不满足某一条件,如果都不满足,则返回 true,否则返回 false

template<class InputIt, class UnaryPredicate>
bool none_of(InputIt first, InputIt last, UnaryPredicate p);

同样地,firstlast 分别为指向范围起始和终止位置的迭代器,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

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

iota 算法用于在给定范围内连续生成一组数字,起始数字由用户设定。

template<class ForwardIt, class T>
void iota(ForwardIt first, ForwardIt last, T value);

其中,firstlast 分别为指向范围起始和终止位置的迭代器,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 中的数组算法介绍,希望对您有用。