対、私はそうのようないくつかのコンテナを反復処理することができますC++ 11の範囲ベースのforループ効率 "のconstオート&i" が "自動I" C++ 11では
for(auto i : vec){
std::cout << i << std::endl;
}
しかし、私がいることを知っていますこの不 - 不、私は唯一の印刷にvec
の値を必要とするので、 - (EDIT:の各要素)のコピーになりvec
を、ので、代わりに私が行うことができます:
for(auto &i : vec){
std::cout << i << std::endl;
}
は、しかし、私はvec
の値が変更されていないとのconst - 正しさを遵守んことを確認するので、私は行うことができます。
for(const auto &i : vec){
std::cout << i << std::endl;
}
だから私の質問は:私だけで見に必要がある場合(EDIT:の各要素)の余分なコピーを持たないために最後のループ(const auto &i
)が常に好ましいとは思わないでしょうvec
?
私はこの中でこの変更を検討している私が開発しているプログラムを持っています。それは効率が重要であるからです(私が最初の場所でC++を使用している理由)。
はい、引数への読み取りアクセスが必要な場合は、不要なコピーを避けるためには 'auto const&'を使用する必要があります。 – 0x499602D2
"const"キーワードはあなたのコードをもっと速くしません... – Tim
'for(auto i:vec)'は 'vec'全体の余分なコピーを作成せず、' vec'の各要素をコピーします。 「i」にする。 – Casey