我正试图找到一种迭代任何STL容器的方法。目前我有这个:
std::string range(std::vector<int>& args)
{
for (auto it : args)
// do something
}
我正在寻找一种能够将任何类型的STL容器传递给函数而不是std::vector<int>& args
的方法。我怎么能这样做?
答案 0 :(得分:7)
使用模板。
template<typename Container>
std::string range(Container& args)
{
for (auto it : args)
// do something
}
可能有特殊类型的重载(例如std::map
)。
答案 1 :(得分:1)
考虑算法中的所有内容都可以做到这一点。
例如,您可以在copy
和list
上致电vector
。
似乎遵循这种模式是你最好的选择:
template<class InputIterator>
std::string range(InputIterator first, const InputIterator last)
{
while(first != last){
// do something
++first;
}
}
所有这一切都取决于你的目标,但很可能你可以使用lambda和find
算法之一或accumulate
来完成你在做什么range
。