Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;将任何容器传递给函数_C++_C++11_Stl - Fatal编程技术网

C++ C++;将任何容器传递给函数

C++ C++;将任何容器传递给函数,c++,c++11,stl,C++,C++11,Stl,我试图找到一种方法来迭代任何STL容器。目前我有: std::string range(std::vector<int>& args) { for (auto it : args) // do something } std::字符串范围(std::vector和args) { 用于(自动it:args) //做点什么 } 我正在寻找一种方法,能够将任何类型的STL容器传递给函数,而不是std::vector&args。我如何才能做到这一点?使用模

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

std::string range(std::vector<int>& args)
{
    for (auto it : args)
        // do something
}
std::字符串范围(std::vector和args)
{
用于(自动it:args)
//做点什么
}
我正在寻找一种方法,能够将任何类型的STL容器传递给函数,而不是
std::vector&args
。我如何才能做到这一点?

使用模板

template<typename Container>
std::string range(Container& args)
{
   for (auto it : args)
      // do something
}
模板
标准::字符串范围(容器和参数)
{
用于(自动it:args)
//做点什么
}

可能是针对特殊类型的重载(
std::map

请考虑算法中的所有内容都是这样做的

例如,您可以在
列表
向量
上调用
copy

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

template<class InputIterator>
std::string range(InputIterator first, const InputIterator last)
{
    while(first != last){
        // do something
        ++first;
    }
}
模板
std::字符串范围(先输入计数器,后常数输入计数器)
{
while(第一个!=最后一个){
//做点什么
++第一,;
}
}

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

模板std::string range(容器和参数)中所做的任何事情
请继续阅读。您是否正在尝试重新创建?模板中一系列项上的几乎所有操作都已包含在
传递开始和结束迭代器中。您是否可以传递
设置
到该函数?我想您可能需要将参数
设为const
@Bぃぃぃぃぃぃぃぃぃぃぃぃぃぃ?和你的回答一样,他们没有解释原因。。