0

所以我一直在寻找一种在字符串列表中搜索字符串的方法。我编写了以下代码

bool contains(const std::list<std::string>& data, const std::string& str)
{
        std::list<std::string>::iterator i;
        for(i=data.begin(); i!=data.end(); ++i)
        {   
                if (str == *i) 
                        return true;
        }   

        return false;

}

这只是一个非常基本的代码。我知道find 方法,但它需要 start 和 end 。理想的解决方案是使用整个容器。有一些相同的提升方法,但我不知道如何使用它们。你能举一些例子来提升查找元素的通用搜索吗?

4

3 回答 3

4

std::findcan 接受 start 和 end 迭代器,它们基本上决定了整个容器:

std::find(data.begin(), data.end(), str);
于 2012-06-14T10:10:10.283 回答
3

使用Boost.Range

#include <boost/range/algorithm/find.hpp>

auto i = boost::find(container, value);
if (i != boost::end(container))
  doSomething(*i);
于 2012-06-14T10:50:31.240 回答
2

为什么不使用类似的东西:

template <typename container, typename T>
bool contains(container& container, T& elt)
{
   return (std::find(container.begin(), container.end, elt) != container.end();
}
于 2012-06-14T10:10:58.910 回答