Перебор списка и поиск каждого элемента в другом списке в 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";
}
Другие вопросы по тегам