我正在使用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'循環包裝到'while'循環中,該循環將檢查'std :: atomic'。然而,它可以僅使用for循環來完成,您只需要更改兩件事:1)在最後復位迭代器,2)檢查您提到的std :: atomic 以便知道何時停止。 –
DimChtz
你想'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(); }' –