You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在数组算术运算函数中减少代码重复?

减少C++数组算术运算代码重复的方案

你的三个函数(add/sub/mul)核心逻辑高度一致:都是从数组首个元素开始,遍历剩余元素进行累积计算,唯一差异是累积时使用的运算符。要消除重复,关键是把通用的遍历累积逻辑抽离,将运算逻辑作为参数传入,具体有几种实现方式:

方式1:自定义通用累积函数+函数指针

把重复的循环逻辑封装成一个通用函数,用函数指针传递不同的运算规则:

#include <iostream>

// 通用累积函数:接收数组长度、数组指针,以及运算逻辑函数指针
int accumulate(int numcount, int numarr[], int (*op)(int, int)) {
    int total = numarr[0];
    for (int i = 1; i < numcount; ++i) {
        total = op(total, numarr[i]);
    }
    return total;
}

// 分别定义加法、减法、乘法的运算逻辑
int add_op(int a, int b) { return a + b; }
int sub_op(int a, int b) { return a - b; }
int mul_op(int a, int b) { return a * b; }

int main(int argc, char* argv[]) {
    const int n = 5;
    int arr[n] = {1, 2, 3, 4, 5};
    
    std::cout << "Addition: " << accumulate(n, arr, add_op) << std::endl;
    std::cout << "Subtraction: " << accumulate(n, arr, sub_op) << std::endl;
    std::cout << "Multiplication: " << accumulate(n, arr, mul_op) << std::endl;
}

方式2:自定义通用函数+Lambda表达式(C++11及以上)

用Lambda替代单独的运算函数,代码更紧凑,无需额外定义全局/静态函数:

#include <iostream>

int accumulate(int numcount, int numarr[], int (*op)(int, int)) {
    int total = numarr[0];
    for (int i = 1; i < numcount; ++i) {
        total = op(total, numarr[i]);
    }
    return total;
}

int main(int argc, char* argv[]) {
    const int n = 5;
    int arr[n] = {1, 2, 3, 4, 5};
    
    std::cout << "Addition: " << accumulate(n, arr, [](int a, int b){ return a + b; }) << std::endl;
    std::cout << "Subtraction: " << accumulate(n, arr, [](int a, int b){ return a - b; }) << std::endl;
    std::cout << "Multiplication: " << accumulate(n, arr, [](int a, int b){ return a * b; }) << std::endl;
}

方式3:直接使用标准库std::accumulate(推荐)

C++标准库<numeric>中的std::accumulate已经实现了通用累积逻辑,直接复用即可,无需自己写循环:

#include <iostream>
#include <numeric> // 必须包含此头文件

int main(int argc, char* argv[]) {
    const int n = 5;
    int arr[n] = {1, 2, 3, 4, 5};
    
    // 加法:std::accumulate默认行为就是加法
    std::cout << "Addition: " << std::accumulate(arr, arr + n, arr[0]) << std::endl;
    // 减法:从第二个元素开始累积,自定义减法逻辑
    std::cout << "Subtraction: " << std::accumulate(arr + 1, arr + n, arr[0], [](int a, int b){ return a - b; }) << std::endl;
    // 乘法:同理自定义乘法逻辑
    std::cout << "Multiplication: " << std::accumulate(arr + 1, arr + n, arr[0], [](int a, int b){ return a * b; }) << std::endl;
}

以上三种方式都能有效消除代码重复,其中std::accumulate是最符合C++编程规范的方案,优先推荐使用。

内容的提问来源于stack exchange,提问作者Tuilip Sharma

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 02:30:50