簡體   English   中英

同時迭代兩個std :: lists

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM