Перебор списка и поиск каждого элемента в другом списке в C++
Я создал список из 4 элементов, который называется "рабочий список". У меня есть еще один список под названием "список выбора", который содержит около 40 элементов. Я хочу проверить, присутствуют ли какие-либо элементы в "рабочем списке" в "списке выбора".
Я понимаю, что я использовал бы "std::find" from для поиска, но как бы я проверил проверку каждого элемента IN ORDER из "worklist" в "choicelist"?
Учитывая, что как только элемент из "рабочего списка" был найден в "списке выбора", я хочу, чтобы процесс поиска завершился (и желательно какое-то уведомление о том, какой элемент в "рабочем списке" был первым, который соответствовал).
1 ответ
Вы должны перебрать элементы первого списка и проверить, есть ли он во втором списке, используя функцию поиска. если он найдет элемент поиска, распечатайте его и разорвите цикл.
std::list<int> worklist;
std::list<int> choicelist;
//This loop only works in C++11 and above,
//in case of C++98, you need to use iterators to iterate over list
for( auto &x : worklist)
{
//auto is also a feature of C++11 and above
auto y = std::find (std::begin(choicelist),
std::end(choicelist), x);
if( y != choicelist.end())
{
std::cout<< *y<<"\n";
break;
}
}
если вам просто нужно найти первый элемент первого контейнера во втором контейнере,
auto y= std::find_first_of(std:begin(choicelist), std::end(choicelist),
std::begin(worklist), std::end(worklist));
if( y != choicelist.end())
{
std::cout<< *y<<"\n";
}