0

私が知っているように、ループ内の POD 型またはプリミティブ型の変数の宣言は問題ありません (オーバーヘッドなし)。

参照変数はどうですか?
ループ内で参照変数を宣言することは、パフォーマンスにとって重要ですか?

たとえば、以下のように、変数はベクトルを参照します。

vector<vector<int> > data (100, vector<int> (100));
for (int i = 0; i < 100; ++i) {
    vector<int> &row = data[i];
    ...
}

オーバーヘッドはありませんよね?

ありがとうございました。

4

2 に答える 2

1

パフォーマンスの観点から見ると、参照はポインターと同じくらい計算が複雑です (通常、同じ方法で内部的に実装されます)。

参照自体の初期化には、ポインターの初期化よりもオーバーヘッドがありません。

ただし、ユースケースに基づいて、反復子を使用する方が簡単で、同じくらい効率的であることがわかります (少し冗長ではありますが)。

vector<vector<int> > data (100, vector<int> (100));
for (vector<vector<int> >::iterator row = data.begin(); row != data.end(); ++row) {
    // (*row)[0] = 1;
}
于 2013-03-18T14:11:03.513 に答える
0

参照は基本的にメモリの場所であるため、オーバーヘッドはありません。int32 ビット アプリケーションでは、メモリ ロケーションは 4 バイトであるため、ループ内でそのことを宣言すると、無視できる :を宣言するのと同じオーバーヘッドが発生します。

于 2013-03-18T14:11:10.320 に答える