[英]iterate through two std::lists simultaneously
對不起,如果這個問題太簡單了。
先前的錯誤檢查確保l1.size() == l2.size()
。
std::list<object1>::iterator it1 = l1.begin();
std::list<object2>::iterator it2 = l2.begin();
while(it1 != l1.end() && it2 != l2.end()){
//run some code
it1++;
it2++;
}
這是一種合理的方法,還是有更優雅的解決方案? 謝謝你的幫助。
如果無條件地增加,我更喜歡使用for
:
for(; it1 != l1.end() && it2 != l2.end(); ++it1, ++it2)
{
//run some code
}
在列表大小相同的情況下,您可以省略一個測試,但我不確定在運行某些代碼時會發生什么!
我認為這是完全合理的(除了我使用預增量而不是后增量)。
您可以考慮使用某種類型的“zip迭代器” ,但在這種情況下,這並不值得麻煩。
如果要對每對對象執行簡單操作,則可以使用std::transform
。
按照您的方式進行操作是合理的,您可以采取其他一些方法來最大限度地減少檢查的數量:
如果你已經檢查過兩個長度是相等的(如前面的檢查所述),循環標准就足夠了,這就消除了兩個變量的訪問,並且只依賴於一個變量的增量:
for (int i = 0; i< l1.size();i++)
{
// run some code here
}
但是,您需要使用advance()
或next()
來遍歷“some some here”中列表中的對象。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.