C ++传递任何容器来运行

时间:2014-12-08 14:09:04

标签: c++ c++11 stl

我正试图找到一种迭代任何STL容器的方法。目前我有这个:

std::string range(std::vector<int>& args)
{
    for (auto it : args)
        // do something
}

我正在寻找一种能够将任何类型的STL容器传递给函数而不是std::vector<int>& args的方法。我怎么能这样做?

2 个答案:

答案 0 :(得分:7)

使用模板。

template<typename Container>
std::string range(Container& args)
{
   for (auto it : args)
      // do something
}

可能有特殊类型的重载(例如std::map)。

答案 1 :(得分:1)

考虑算法中的所有内容都可以做到这一点。

例如,您可以在copylist上致电vector

似乎遵循这种模式是你最好的选择:

template<class InputIterator>
std::string range(InputIterator first, const InputIterator last)
{
    while(first != last){
        // do something
        ++first;
    }
}

所有这一切都取决于你的目标,但很可能你可以使用lambda和find算法之一或accumulate来完成你在做什么range