如何将函数的整数大小与数组的实际大小链接起来?C++

How do i link the integer size of the function with the actual size of an array? C++

本文关键字:链接 起来 C++ 数组 整数 函数      更新时间:2023-10-16

>我正在尝试编写一个计算数组总和的函数,但是当我声明 int size = 0; 时,该函数运行 0 次,因为 i=0 ; i

int arraChec(int arra[]) {
    int size = 0;
    int sum = 0;
    for (int i = 0; i < size; i++) {
        sum = sum + arra[i];
    }
    return sum;
}

int main() {
    int arra1[7] = { 2,3,5,7,8,9,1 };
    cout << arraChec(arra1) << endl;
    system("pause");
}

传入数组大小作为参数:

#include <iostream>
int arraChec(int arra[], int size) {
    int sum = 0;
    for (int i = 0; i < size; i++) {
        sum += arra[i];
    }
    return sum;
}
int main() {
    int arra1[7] = { 2, 3, 5, 7, 8, 9, 1 };
    std::cout << arraChec(arra1, 7) << std::endl;
}

或使用std::vector

#include <iostream>
#include <vector>
int arraChec(std::vector<int>& arra) {
    int sum = 0;
    for (int i = 0; i < arra.size(); i++) {
        sum += arra[i];
    }
    return sum;
}
int main() {
    std::vector<int> arra1 = { 2, 3, 5, 7, 8, 9, 1 };
    std::cout << arraChec(arra1) << std::endl;
}

如果你指的是一些C风格的(sizeof(arra) / sizeof(*arra))结构,我建议你不要使用它。

您需要

将两个参数传递给函数 - 数组的开头加上大小,或者开始和(一个超过)结束,就像C++中的常规一样:

int arraChec(int* begin, int* end) {
    int sum = 0;
    for (int* it = begin; it < end; ++it) {
        sum += *it;
    }
    return sum;
}
int main() {
    int arra1[7] = { 2,3,5,7,8,9,1 };
    cout << arraChec(std::begin(arra1), std::end(arra1)) << endl;
    system("pause");
}

当然,你可以实现是使用标准库:

cout << std::accumulate(std::begin(arra1), std::end(arra1), 0) << endl;

使用 std::array 而不是固定大小的 C 样式数组。

#include <iostream>
#include <array>
#include <numeric>
using namespace std;
int main() {
    array<int, 7> arr = { 2, 3, 5, 7, 8, 9, 1 };
    cout << accumulate(arr.begin(), arr.end(), 0) << endl;
    return 0;
}

输出

35

阅读更多关于 std::accumulate .

尚未提及的另一种方法是:

template<size_t N>
int arraChec(int (&arra)[N]) {
    int sum = 0;
    for (size_t i = 0; i < N; i++) {
        sum = sum + arra[i];
    }
    return sum;
}