C++ 在C++;,如何创建接受InputIterator的函数?
C++C++ 在C++;,如何创建接受InputIterator的函数?,c++,c++11,C++,C++11,C++transform、acculate,以及类似的函数接受一个inputierator作为参数,因此它们可以用于多种类型的容器。我想编写一个接受inputierator的函数,这样我就可以将该函数用于任何类型的容器。我该怎么做?我需要什么标题等等。inputierator是一个概念,而不是一种类型 只要写 template<typename InputIterator> void myFunc(InputIterator begin, InputIterator end) {
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_优先,
一元操作(一元操作);
在编译时,使用标准语言中定义的各种方法检查特定需求,并将其定义为,例如,…“我该怎么做?”您使用模板。“我该怎么做?”您使用模板。