[解決済み] C++ベクトルを端から端まで反復処理する。
2022-07-12 04:30:14
質問
ベクトルの端から端まで反復処理することは可能ですか?
for (vector<my_class>::iterator i = my_vector.end();
i != my_vector.begin(); /* ?! */ ) {
}
とかそういうのしかないのかな。
for (int i = my_vector.size() - 1; i >= 0; --i) {
}
どのように解決するのですか?
一つの方法として
for (vector<my_class>::reverse_iterator i = my_vector.rbegin();
i != my_vector.rend(); ++i ) {
}
rbegin()
/
rend()
は特にそのために設計されました。(そして、はい、インクリメントされた
reverse_interator
をインクリメントすると、それが後方に移動します)。
さて、理論的には、あなたの方法(
begin()
/
end()
&
--i
) が動作するでしょう。
std::vector
のイテレータは双方向性ですが、覚えておいてください。
end()
は最後の要素ではありません。最後の要素のひとつ先なので、最初にデクリメントしなければならず、begin()
- に到達した時点で終了ですが、まだ処理を行わなければなりません。
vector<my_class>::iterator i = my_vector.end();
while (i != my_vector.begin())
{
--i;
/*do stuff */
}
UPDATE: 私はどうやら強引に
for()
ループを
while()
ループに変換します。(重要なのは
--i
が冒頭にあることです)。
関連
-
[解決済み】coutはstdのメンバではない
-
[解決済み] 解決済み] `pthread_create' への未定義の参照 [重複] [重複
-
[解決済み] 配列のベクトルを扱う正しい方法
-
[解決済み】変数やフィールドがvoid宣言されている
-
[解決済み】Eclipse IDEでC++エラー「nullptrはこのスコープで宣言されていません」が発生する件
-
[解決済み] なぜC++はPythonよりもstdinからの行の読み込みが遅いのですか?
-
[解決済み] なぜ、オブジェクトそのものではなく、ポインタを使用しなければならないのですか?
-
[解決済み] std::vector<> からインデックスで要素を消すにはどうしたらいいですか?
-
[解決済み】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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】 unsigned int vs. size_t
-
[解決済み】クラステンプレートの引数リストがない
-
[解決済み] クラスにデフォルトコンストラクタが存在しない。
-
[解決済み】Visual C++で "Debug Assertion failed "の原因となる行を見つける。
-
[解決済み】C++の余分な資格エラー
-
[解決済み】エラー:不完全な型へのメンバーアクセス:前方宣言の
-
[解決済み] 配列のベクトルを扱う正しい方法
-
[解決済み] 変数サイズのオブジェクトが初期化されないことがある c++
-
[解決済み] C++11逆レンジベースforループ
-
[解決済み】std::listを繰り返しながら要素を削除することは可能ですか?