无论何时调用函数,都将值存储在数组中

时间:2016-06-22 18:02:30

标签: c++ c++11 visual-c++

我是c ++的新手。我必须通过公式计算一个值,并在每次调用函数时存储该值。我创建了一个大小为10的数组,并计算了myValue然后尝试存储该值。这是正确的方法吗?它是否会以每次调用函数时的方式工作,它将计算并存储myValue并在下一次调用中使用该值n [i-1]来计算我的值n [i]。让我们在第一次调用中说myvalue为0.5。在下一次调用中,它将是myValue =(1-0.3)* 0.5。它会将所有10个值存储在10个调用中,并使用最后存储的值来计算myValue。当我编译它时,它没有向我显示任何错误,但我仍然怀疑。

static double
CalculatemyValue(Node* ch)
{ 
float gamma=0.3;
double myValue = 0.0;
   int n[10];
   int i = 0;
   n[i] = myValue;
   myValue = ((1-gamma)*n[i-1]) //previous value
   return myValue;
} 

1 个答案:

答案 0 :(得分:1)

在给定的代码中

static double
CalculatemyValue(Node* ch)
{ 
float gamma=0.3;
double myValue = 0.0;
   int n[10];
   int i = 0;
   n[i] = myValue;
   myValue = ((1-gamma)*n[i-1]) //previous value
   return myValue;
}

...数组n是一个本地自动变量。每次执行到达声明时都会重新创建,并在执行离开块时销毁。呼叫之间不保留任何信息。

在调用之间保持状态的一种好方法是使函数成为类的成员函数,其数据成员构成您要保留的状态,例如:像这样:

class Power_sequence
{
private:
    double   gamma_;
    double   value_;
public:
    auto gamma() const -> double { return gamma_; }

    void advance() { value_ *= 1 - gamma_; }
    auto current() const -> double { return value_; }

    auto next()
        -> double
    {
        double const result = current();
        advance();
        return result;
    }

    Power_sequence( double const gamma = 0.3 )
        : gamma_( gamma )
        , value_( 1.0 )
    {}
};

...你可以这样使用:

Power_sequence seq;
for( int i = 1; i <= 42; ++i )
{
    cout << seq.next() << endl;
}

免责声明:以上代码未经编译器检查。

另一种方法是将状态作为函数的显式参数传递。