迭代列表并在c ++中搜索另一个列表中的每个元素

时间:2015-04-13 14:57:06

标签: c++ list search iterator elements

我创建了一个名为" worklist的4个元素的列表。"我有另一个名为" choicelist"其中有大约40个元素。我想检查" worklist"中是否有任何元素。出现在" choicelist"。

我知道我会使用" std :: find"从搜索,但我如何从"工作清单"检查每个元素IN ORDER? in" choicelist"?

记住,一旦来自"工作清单"已经在" choicelist"我希望搜索过程结束(最好是某些关于" worklist"中哪个元素是第一个匹配的通知)。

1 个答案:

答案 0 :(得分:2)

你必须迭代第一个列表的元素,并使用find函数检查它是否在第二个列表中。如果它找到了搜索元素,则打印它并打破循环。

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