根据参数创建数组

Creating array based on parameter

int evenFibonacciSum(int max)
{
    int fib[max + 2];
    int i;

    fib[0] = 0;
    fib[1] = 1;

    for (i = 2; i <= max; i++)
        fib[i] = fib[i - 1] + fib[i - 2];

    return fib[max];
}

我正在尝试编写一个函数,它将 return 斐波那契数列的结果直到最大值点。问题是编译器说 max 在声明数组时必须有一个常量值。我怎样才能解决这个问题?

意识到您只需要跟踪三个数字并在不需要数组的情况下实现该功能:

int fibonacci(int max)
{
    if (max < 2)
        return max;

    int a = 1;
    int b = 1;
    int c;
    int result = 1;

    for (int i = 0; i < max - 2; i++) {
        switch (i % 3) {
        case 0:
            result = c = b + a;
            break;
        case 1:
            result = a = c + b;
            break;
        case 2:
            result = b = c + a;
            break;
        }
    }

    return result;
}

您已经了解了我们所知道的动态数组或 STL 向量存在的原因。

编译器抛出该错误的原因是 在标准数组实现中,数组大小必须在声明期间准确指定.

float a[100] <- correct
float a[] <- incorrect

这是正确的,因为编译器确切地知道必须为该数组集合分配多少特定数据类型的内存。

现在让我们转到动态数组 - 原始指针和 STL 向量,它使您有权在运行时决定数组大小。

方法一:原始指针

#include <cstddef> // std::size_t

int evenFibonacciSum(int max)
{
    int *fib=NULL;

    fib = new int[max+2];

    fib[0] = 0;
    fib[1] = 1;

    for (std::size_t i = 2; i <= max; i++)
        fib[i] = fib[i - 1] + fib[i - 2];

    int result = fib[max];
    delete [] fib;
    return result;
}

方法 2:STL 向量

#include <cstddef>
#include <vector>

int evenFibonacciSum(int max)
{
    std::vector<int> fib(max+2);

    fib[0] = 0;
    fib[1] = 1;

    for (std::size_t i = 2; i <= max; i++)
        fib[i] = fib[i - 1] + fib[i - 2];

    return fib[max];
}

我建议您使用方法 2:STL 向量,因为它会自动处理此类动态分配引起的内存管理问题。

祝你有美好的一天!

Arul Verman