[解決済み】配列のインデックスの代わりにイテレータを使用する理由は?
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()
といった具合です。 明示的なループではなく、標準的なアルゴリズムを使用することで、車輪の再発明を回避することができます。 正しいアルゴリズムが選択されていれば、コードはより効率的で、正しく、再利用可能です。
関連
-
[解決済み】Visual Studio 2015で「非標準の構文。'&'を使用してメンバーへのポインターを作成します」エラー
-
[解決済み】C++の余分な資格エラー
-
[解決済み】CMakeエラー at CMakeLists.txt:30 (project)。CMAKE_C_COMPILER が見つかりませんでした。
-
[解決済み】std::cin.getline( ) vs. std::cin
-
[解決済み] 文字列の単語を反復処理するにはどうすればよいですか?
-
[解決済み] using namespace std;」はなぜバッドプラクティスだと言われるのですか?
-
[解決済み] B "の印刷が "#"の印刷より劇的に遅いのはなぜですか?
-
[解決済み] なぜC++はPythonよりもstdinからの行の読み込みが遅いのですか?
-
[解決済み] なぜ、オブジェクトそのものではなく、ポインタを使用しなければならないのですか?
-
[解決済み】C/C++の"-->"演算子とは何ですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】コンストラクターでのエラー:識別子を期待されますか?
-
[解決済み】C++ クラスヘッダが含まれているときに「不明な型」があるのはなぜですか?重複
-
[解決済み】C++のGetlineの問題(オーバーロードされた関数 "getline "のインスタンスがない
-
[解決済み】C++の変数はイニシャライザーを持っているが、不完全な型?
-
[解決済み】ファイルから整数を読み込んで配列に格納する C++ 【クローズド
-
[解決済み】指定範囲内の乱数で配列を埋める(C++)
-
[解決済み】なぜ、サイズ8の初期化されていない値を使用するのでしょうか?
-
[解決済み] 配列のベクトルを扱う正しい方法
-
[解決済み] なぜインデックスではなくstring::iteratorを使用するのですか?重複
-
[解決済み] イテレータループとインデックスループの比較【重複あり