1. ホーム
  2. c++

[解決済み】配列のインデックスの代わりにイテレータを使用する理由は?

2022-04-02 07:53:11

質問

次の2行のコードを例にとります。

for (int i = 0; i < some_vector.size(); i++)
{
    //do stuff
}

そして、これ。

for (some_iterator = some_vector.begin(); some_iterator != some_vector.end();
    some_iterator++)
{
    //do stuff
}

2番目の方法が好ましいと聞いています。具体的にはなぜですか?

どのように解決するのですか?

最初の形式は、vector.size()が高速な演算である場合にのみ効率的です。 これはベクトルには当てはまりますが、リストなどには当てはまりません。 また、ループの本体内で何をするつもりなのでしょうか? のように要素にアクセスするつもりであれば、それは効率的ではありません。

T elem = some_vector[i];

とすると、コンテナに operator[](std::size_t) が定義されています。 繰り返しになりますが、これはvectorには当てはまりますが、他のコンテナには当てはまりません。

イテレータを使用すると、より一層 コンテナの独立性 . ランダムアクセス能力とか、高速な size() の操作で、コンテナがイテレータ機能を持つことだけが重要です。

標準的なアルゴリズムを使用することで、さらにコードを拡張することができます。 何を達成しようとしているのかによりますが、例えば std::for_each() , std::transform() といった具合です。 明示的なループではなく、標準的なアルゴリズムを使用することで、車輪の再発明を回避することができます。 正しいアルゴリズムが選択されていれば、コードはより効率的で、正しく、再利用可能です。