2017-01-06 6 views
1

私はベクトルを返す関数myfunを持っています。ベクトルを返すループ内の関数を使用する

vector<double> myfun(const size_t k, const size_t i){ 
    vector<double> v(k); 
    // do some computation with remaining arguments 
    return v; 
} 

その後、私はvを更新するために、ループ内でそれを使用して、いくつかの結果を得るためにvを使用します。

int main(){ 
    size_t N = 100; // iteration size 
    size_t n = 10; // size of v 
    vector<double> result(N); 
    vector<double> v(n); 
    for(size_t i = 0; i<N; i++){ 
     v = myfun(n,i); // compute for each iteration 
     result[i] = compute_some_value(v); 
    } 
} 

だから、私の質問は:

  • vは、実際にmyfunの内側に、それが呼び出されるたびに割り当てられていますか?
  • もしそうなら、古いvはどうなりますか?
  • 出力引数vにはvoid myfun(some_args, vector<double> &v)のようなアドレスを使用する方が良いでしょうか?

答えて

1

実際にvは呼び出されるたびにmyfunの内部に割り当てられますか?

はい

それがない場合は、何が古いVになりますか?

上書きされます。

また、それだけで、出力引数vのために無効でmyfun(some_args、ベクトル& V)のようなアドレスを使用して使用して良いですか?

はい、操作によっては、参照によってベクターを渡す方がよいでしょう。

あなたは

double compute_some_value(vector<double> & v, const size_t i) { 
    v.clear(); // use if required 
    // do some computation with remaining arguments and return 
} 

int main() { 
    size_t N = 100; // iteration size 
    size_t n = 10; // size of v 
    vector<double> result(N), v(n); 
    for (size_t i = 0; i < N; i++) { 
     result[i] = compute_some_value(v, i); 
    } 
} 
0

この方法は、vは実際にでmyfunの内側に、それが呼び出されるたびに割り当てられないことができますか?

はい

それがない場合は、何が古いVになりますか?

vがスコープから外れると、デストラクタが呼び出され、オブジェクトが破壊されます。このため、クラスのデストラクタを明示的に呼び出す必要はありません。

また、それだけで無効でmyfunのようなアドレスを使用する(some_args、 ベクトル& v)の出力引数vにとって使い良いですか?

実際の使用状況によって異なります。メモリの問題が懸念される場合は、リファレンスを渡す方が良いでしょう。

関連する問題