Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/156.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++;,如何创建接受InputIterator的函数?_C++_C++11 - Fatal编程技术网

C++ 在C++;,如何创建接受InputIterator的函数?

C++ 在C++;,如何创建接受InputIterator的函数?,c++,c++11,C++,C++11,C++transform、acculate,以及类似的函数接受一个inputierator作为参数,因此它们可以用于多种类型的容器。我想编写一个接受inputierator的函数,这样我就可以将该函数用于任何类型的容器。我该怎么做?我需要什么标题等等。inputierator是一个概念,而不是一种类型 只要写 template<typename InputIterator> void myFunc(InputIterator begin, InputIterator end) {

C++
transform
acculate
,以及类似的函数接受一个
inputierator
作为参数,因此它们可以用于多种类型的容器。我想编写一个接受
inputierator
的函数,这样我就可以将该函数用于任何类型的容器。我该怎么做?我需要什么标题等等。

inputierator
是一个概念,而不是一种类型

只要写

template<typename InputIterator>
void myFunc(InputIterator begin, InputIterator end) {
    /* … */
}
模板
void myFunc(输入计算器开始,输入计算器结束){
/* … */
}

如果您在
开始
结束
变量上应用,那么您就可以开始了。只有与(递增、取消引用…)相对应的操作。

输入计算器
是一个概念,而不是一种类型

只要写

template<typename InputIterator>
void myFunc(InputIterator begin, InputIterator end) {
    /* … */
}
模板
void myFunc(输入计算器开始,输入计算器结束){
/* … */
}

如果您只在
开始
结束
变量上应用与(递增、取消引用…)相对应的操作,您就可以开始了。

您不需要任何标题。您只需创建一个函数模板,并记录模板,以要求一个作为输入迭代器的参数。不过,您可能希望使用
标题中的
迭代器\u traits
模板来提取相关数据。例如:

#include <iterator>

//  Requires: InputIterator is an input iterator
//  Returns: sum of the range, starting at acc

template <typename InputIterator>
typename std::iterator_traits<InputIterator>::value_type
sum(InputIterator it,
    InputIterator last,
    typename std::iterator_traits<InputIterator>::value_type acc)
{
    while (it != last) { acc += *it; ++it; }
    return acc;
}
// Requires: Iter is an input iterator, F is a callable and copyable
// Returns: a copy of f
// Effects: calls f with every value in the range
template <typename Iter, typename F>
F for_each(Iter it, Iter last, F f)
{
    while (it != last) { f(*it); ++it; }
    return f;
}
#包括
//要求:InputIterator是一个输入迭代器
//返回:范围的总和,从acc开始
样板
typename std::迭代器特征::值类型
求和(输入或输出),
最后输入,
类型名称std::迭代器特征::值类型acc)
{
while(it!=last){acc+=*it;++it;}
返回acc;
}
对于某些算法,您根本不需要特征,因此不需要标题。例如:

#include <iterator>

//  Requires: InputIterator is an input iterator
//  Returns: sum of the range, starting at acc

template <typename InputIterator>
typename std::iterator_traits<InputIterator>::value_type
sum(InputIterator it,
    InputIterator last,
    typename std::iterator_traits<InputIterator>::value_type acc)
{
    while (it != last) { acc += *it; ++it; }
    return acc;
}
// Requires: Iter is an input iterator, F is a callable and copyable
// Returns: a copy of f
// Effects: calls f with every value in the range
template <typename Iter, typename F>
F for_each(Iter it, Iter last, F f)
{
    while (it != last) { f(*it); ++it; }
    return f;
}
//要求:Iter是输入迭代器,F是可调用和可复制的
//返回:f的副本
//效果:使用范围内的每个值调用f
样板
F代表每个(Iter it、Iter last、F)
{
while(it!=last){f(*it);++it;}
返回f;
}

您不需要任何标题。您只需创建一个函数模板,并记录模板,以要求一个作为输入迭代器的参数。不过,您可能希望使用
标题中的
迭代器\u traits
模板来提取相关数据。例如:

#include <iterator>

//  Requires: InputIterator is an input iterator
//  Returns: sum of the range, starting at acc

template <typename InputIterator>
typename std::iterator_traits<InputIterator>::value_type
sum(InputIterator it,
    InputIterator last,
    typename std::iterator_traits<InputIterator>::value_type acc)
{
    while (it != last) { acc += *it; ++it; }
    return acc;
}
// Requires: Iter is an input iterator, F is a callable and copyable
// Returns: a copy of f
// Effects: calls f with every value in the range
template <typename Iter, typename F>
F for_each(Iter it, Iter last, F f)
{
    while (it != last) { f(*it); ++it; }
    return f;
}
#包括
//要求:InputIterator是一个输入迭代器
//返回:范围的总和,从acc开始
样板
typename std::迭代器特征::值类型
求和(输入或输出),
最后输入,
类型名称std::迭代器特征::值类型acc)
{
while(it!=last){acc+=*it;++it;}
返回acc;
}
对于某些算法,您根本不需要特征,因此不需要标题。例如:

#include <iterator>

//  Requires: InputIterator is an input iterator
//  Returns: sum of the range, starting at acc

template <typename InputIterator>
typename std::iterator_traits<InputIterator>::value_type
sum(InputIterator it,
    InputIterator last,
    typename std::iterator_traits<InputIterator>::value_type acc)
{
    while (it != last) { acc += *it; ++it; }
    return acc;
}
// Requires: Iter is an input iterator, F is a callable and copyable
// Returns: a copy of f
// Effects: calls f with every value in the range
template <typename Iter, typename F>
F for_each(Iter it, Iter last, F f)
{
    while (it != last) { f(*it); ++it; }
    return f;
}
//要求:Iter是输入迭代器,F是可调用和可复制的
//返回:f的副本
//效果:使用范围内的每个值调用f
样板
F代表每个(Iter it、Iter last、F)
{
while(it!=last){f(*it);++it;}
返回f;
}

我怀疑您已经看过例如文档了

您应该注意到,他们将这些迭代器类型作为模板参数:

template< class InputIt, class OutputIt, class UnaryOperation >
OutputIt transform( InputIt first1, InputIt last1, OutputIt d_first,
                    UnaryOperation unary_op );
template
输出变换(输入优先1,输入最后1,输出d_优先,
一元操作(一元操作);

在编译时使用标准语言中定义的各种方法检查特定需求,并将其定义为例如…

我怀疑您已经看过例如文档了

您应该注意到,他们将这些迭代器类型作为模板参数:

template< class InputIt, class OutputIt, class UnaryOperation >
OutputIt transform( InputIt first1, InputIt last1, OutputIt d_first,
                    UnaryOperation unary_op );
template
输出变换(输入优先1,输入最后1,输出d_优先,
一元操作(一元操作);
在编译时,使用标准语言中定义的各种方法检查特定需求,并将其定义为,例如,…

“我该怎么做?”您使用模板。“我该怎么做?”您使用模板。