📌  相关文章
📜  从数组 C++ 中选择元素(1)

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

从数组 C++ 中选择元素

在C++编程中,经常需要从数组中选择出特定的元素,比如最大值、最小值、特定的值等。本文将介绍如何通过程序实现这些操作。

选择最大值和最小值

选择一个数组中的最大值和最小值是最基本的操作。C++标准库中提供了相应的函数max_element和min_element来实现这个功能。

#include <iostream>
#include <algorithm>

using namespace std;

int main()
{
    int arr[] = { 1, 5, 3, 2, 4 };
    int n = sizeof(arr) / sizeof(arr[0]);
    int* maxElement = max_element(arr, arr + n);
    int* minElement = min_element(arr, arr + n);

    cout << "Max Element = " << *maxElement << endl;
    cout << "Min Element = " << *minElement << endl;

    return 0;
}

上述代码中,使用max_element函数可以选择数组中的最大值,使用min_element函数可以选择数组中的最小值。max_element和min_element函数均使用迭代器,第一个参数是要选择的数组的开头,第二个参数是要选择的数组的结尾。

选择特定的元素

如果需要选择数组中满足特定条件的元素,可以使用STL库中的find_if函数。

#include <iostream>
#include <algorithm>

using namespace std;

bool isOdd(int i) { return ((i % 2) == 1); }

int main()
{
    int arr[] = { 1, 5, 3, 2, 4 };
    int n = sizeof(arr) / sizeof(arr[0]);

    int* oddElement = find_if(arr, arr + n, isOdd);

    cout << "oddElement = " << *oddElement << endl;

    return 0;
}

上述代码中,使用find_if函数可以选择数组中第一个满足条件的元素。第一个参数是要选择的数组的开头,第二个参数是要选择的数组的结尾,第三个参数是一个函数指针,代表着所要选择的元素满足的条件。

选择满足条件的元素的数量

如果需要选择满足特定条件的元素的数量,可以使用STL库中的count_if函数。

#include <iostream>
#include <algorithm>

using namespace std;

bool isOdd(int i) { return ((i % 2) == 1); }

int main()
{
    int arr[] = { 1, 5, 3, 2, 4 };
    int n = sizeof(arr) / sizeof(arr[0]);

    int cnt = count_if(arr, arr + n, isOdd);

    cout << "Number of odd elements = " << cnt << endl;

    return 0;
}

上述代码中,使用count_if函数可以选择数组中满足条件的元素的数量。第一个参数是要选择的数组的开头,第二个参数是要选择的数组的结尾,第三个参数是一个函数指针,代表着所要选择的元素满足的条件。

选择满足条件的元素并存储在另一个数组中

如果需要选择满足特定条件的元素并存储在另一个数组中,可以先使用copy_if函数将选择的元素复制到一个容器中,然后在将这个容器中的元素转换成数组。

#include <iostream>
#include <algorithm>
#include <vector>

using namespace std;

bool isOdd(int i) { return ((i % 2) == 1); }

int main()
{
    int arr[] = { 1, 5, 3, 2, 4 };
    int n = sizeof(arr) / sizeof(arr[0]);

    vector<int> v(n);

    auto it = copy_if(arr, arr + n, v.begin(), isOdd);
    v.resize(distance(v.begin(), it));

    int* newArr = new int[v.size()];
    copy(v.begin(), v.end(), newArr);

    // print the new array
    for (int i = 0; i < v.size(); i++) {
        cout << newArr[i] << " ";
    }
    cout << endl;

    delete[] newArr;

    return 0;
}

上述代码中,使用copy_if函数将选择的元素复制到一个vector容器中,然后将vector容器中的元素复制到一个新的数组中。使用vector容器的好处是不需要预先知道选择元素的数量,而且vector容器会自动管理分配的内存空间。