Как выполнить итерацию по двум спискам одновременно?

#c

#c

Вопрос:

У меня их два std::list<std::string> list1 std::list<std::string> list2 , и мне нужно каким-то образом выполнять цикл по ним одновременно.

Я попробовал пару вещей, таких как using std::transform и doing std::transform (list1.begin(), list1.end(), list2.begin(), list2.end()); , но, к сожалению, безуспешно.

Что я сейчас делаю, чтобы распечатать их по одному, так это

 for(std::list<std::string>::iterator it=list1.begin(); it!=list1.end();   it) {
            cout << *it <<endl;
}
  

Комментарии:

1. for Цикл логически эквивалентен тому, что за его разделом инициализации следует while (condition) , причем последняя часть for инструкции всегда является самой последней инструкцией, выполняемой внутри while цикла. Просто возьмите то, что вам нужно сделать здесь, и структурируйте это таким образом, логически эквивалентный while цикл.

2. Библиотеки могут предложить zip_iterator для этого.

Ответ №1:

Вероятно, есть более разумные способы сделать это, но это сработает (обратите внимание, что если списки имеют разную длину, будет напечатано столько пар элементов, сколько элементов в более коротком списке):

   for(std::list<std::string>::iterator it1=list1.begin(), it2=list2.begin();
     (it1!=list1.end())amp;amp;(it2!=list2.end());
       it1,   it2) 
  {
     std::cout << *it1 << " : " << *it2 << std::endl;
  }