#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;
}