std::vector
をC++
と一緒に使用して、一部のアイテムを保存します。&後で取得します。以下は私のベクトルをどのように反復しているかです。繰り返すサイクルでstd :: vectorをループする方法
std::vector<some_object> some_vector;
some_vector.resize(10);
for (auto it = some_vector.begin(); it != some_vector.end(); ++it) {
int current_it_index = std::distance(some_vector.begin(), it);
}
私は繰り返しごとにインデックスが必要です。したがって、上記のように繰り返しごとにそれを取得します。
上記のループは正常に動作します。ですが、は、無限サイクルでベクターをループしたいと考えます。。どうやってやるの?
ここで、実行中のループを繰り返しサイクルで実行させると、どのように停止するのでしょうか?私は&がかなりうまくいくはずだという信号を送る変数としてstd::atomic<bool>
を使うことを考えていますか?
PS:質問を説明するコンテナの例としてstd::vector
を使用しました。提案された解決策がstd::array
または他のコンテナでも機能することができれば素晴らしいでしょう。
簡単なwhileループがこのトリックを行います。それを考えるのではなく、現在の 'for'ループを' std :: atomic 'をチェックする' while'ループにラップしてください。しかし、あなたがすでに持っている 'for'ループだけを使って行うことができます。あなたは2つのことを変更する必要があります:1)最後にイテレータをリセットし、2)あなたが知るために述べた' std :: atomic 'いつ止めるか。 –
DimChtz
'current_it_index'がベクトルをもう一度やり直すか、それとも増加し続けるべきかの後に' current_it_index'を '0'にリセットしますか?また、XY問題のような音がします。なぜあなたがこれをやっているのかを教えてくれたら、あなたに別のものを指摘することができます。 – NathanOliver
'for(auto it = some_vector.begin();; ++ it){ int current_it_index = std :: distance(some_vector.begin()、it); if(it == some_vector.end()-1)it = some_vector.begin(); } ' –