目录

    • 方法一:使用循环遍历数组
    • 方法二:使用标准库函数 `std::accumulate`
    • 方法三:使用 C++11 的范围循环
    • 方法四:使用指针遍历
    • 方法五:使用 STL 容器和算法
    • 方法六:使用 Lambda 表达式

在C++中,计算数组元素的平均值有多种方法,以下是几种常见的方法及其实现思路、代码示例和说明:

方法一:使用循环遍历数组

思路:通过循环遍历数组,将所有元素累加到一个变量中,然后将累加结果除以数组的长度,得到平均值。

代码示例

#include <iostream>
using namespace std;

double calculateAverage(int arr[], int size) {
    double sum = 0;
    for (int i = 0; i < size; ++i) {
        sum += arr[i];
    }
    return sum / size;
}

int main() {
    int arr[] = {1, 2, 3, 4, 5};
    int size = sizeof(arr) / sizeof(arr[0]);
    double average = calculateAverage(arr, size);
    cout << "Average: " << average << endl;
    return 0;
}

说明

  • sizeof(arr) / sizeof(arr[0]) 用于计算数组的长度。
  • 循环中将每个元素累加到 sum 中,最后计算平均值。

方法二:使用标准库函数 std::accumulate

思路:使用 <numeric> 头文件中的 std::accumulate 函数来计算数组元素的总和,然后除以数组的长度。

代码示例

#include <iostream>
#include <numeric>
using namespace std;

double calculateAverage(int arr[], int size) {
    double sum = accumulate(arr, arr + size, 0.0);
    return sum / size;
}

int main() {
    int arr[] = {1, 2, 3, 4, 5};
    int size = sizeof(arr) / sizeof(arr[0]);
    double average = calculateAverage(arr, size);
    cout << "Average: " << average << endl;
    return 0;
}

说明

  • std::accumulate 的第三个参数是累加的初始值,这里使用 0.0 确保结果为 double 类型。
  • 简化了代码,直接利用标准库函数计算总和。

方法三:使用 C++11 的范围循环

思路:使用 C++11 的范围循环(for :)来遍历数组,累加元素值,然后计算平均值。

代码示例

#include <iostream>
using namespace std;

double calculateAverage(int arr[], int size) {
    double sum = 0;
    for (int value : arr) {
        sum += value;
    }
    return sum / size;
}

int main() {
    int arr[] = {1, 2, 3, 4, 5};
    int size = sizeof(arr) / sizeof(arr[0]);
    double average = calculateAverage(arr, size);
    cout << "Average: " << average << endl;
    return 0;
}

说明

  • 范围循环简化了数组的遍历过程,代码更简洁。
  • 逻辑与方法一类似,只是遍历方式不同。

方法四:使用指针遍历

思路:使用指针来遍历数组,将数组的每个元素累加到一个变量中,然后计算平均值。

代码示例

#include <iostream>
using namespace std;

double calculateAverage(int arr[], int size) {
    double sum = 0;
    int* ptr = arr;
    for (int i = 0; i < size; ++i) {
        sum += *(ptr + i);
    }
    return sum / size;
}

int main() {
    int arr[] = {1, 2, 3, 4, 5};
    int size = sizeof(arr) / sizeof(arr[0]);
    double average = calculateAverage(arr, size);
    cout << "Average: " << average << endl;
    return 0;
}

说明

  • 使用指针 ptr 指向数组的首地址,通过指针偏移访问数组元素。
  • 与方法一类似,但使用指针来实现。

方法五:使用 STL 容器和算法

思路:使用 STL 容器(如 std::vector)和算法(如 std::accumulate)来计算平均值。

代码示例

#include <iostream>
#include <vector>
#include <numeric>
using namespace std;

double calculateAverage(const vector<int>& vec) {
    double sum = accumulate(vec.begin(), vec.end(), 0.0);
    return sum / vec.size();
}

int main() {
    vector<int> vec = {1, 2, 3, 4, 5};
    double average = calculateAverage(vec);
    cout << "Average: " << average << endl;
    return 0;
}

说明

  • 使用 std::vector 容器存储数组元素,更灵活。
  • 使用 std::accumulate 计算总和,代码简洁。

方法六:使用 Lambda 表达式

思路:使用 C++11 的 Lambda 表达式结合 std::for_each 来计算总和,然后计算平均值。

代码示例

#include <iostream>
#include <vector>
#include <numeric>
using namespace std;

double calculateAverage(const vector<int>& vec) {
    double sum = 0;
    for_each(vec.begin(), vec.end(), [&](int value) { sum += value; });
    return sum / vec.size();
}

int main() {
    vector<int> vec = {1, 2, 3, 4, 5};
    double average = calculateAverage(vec);
    cout << "Average: " << average << endl;
    return 0;
}

说明

  • 使用 Lambda 表达式简化了累加操作。
  • 结合 std::for_each 遍历容器元素。

这些方法各有优缺点,可以根据具体需求和场景选择合适的方法。

更多推荐