可以将原始指针传递给需要迭代器的模板函数吗?
Can a raw pointer be passed to a template function expecting an iterator?
原始指针可以传递给期望迭代器的模板函数吗?我认为迭代器只是一个覆盖指针相关操作符(例如*,++等)的类,还是迭代器暴露了指针没有的任何额外接口?换句话说,指针"看起来像"迭代器吗?
的例子:
我想使用boost::algorithm::knuth_morris_pratt_search
(文档在这里)。
我的语料库(要搜索的字符串)和模式(要查找的字符串)只是内存中的字节-我有一个包含起始地址的指针,以及字节长度。为了参数的方便,我们设它是一个c风格的字符串。
根据文档,knuth_morris_pratt_search
函数要求我传入语料库和模式的开始和结束迭代器。
我希望使用的函数:
template <typename patIter, typename corpusIter>
corpusIter knuth_morris_pratt_search (
corpusIter corpus_first, corpusIter corpus_last,
patIter pat_first, patIter pat_last );
我可以这样做吗?
// Assume these are initialized:
char* c;
int cLength;
char* p;
int pLength;
char* result = knuth_morris_pratt_search<char*, char*>
(c, c + cLength, p, p + pLength);
我是否认为迭代器只是一个覆盖指针相关操作符(例如*,++等)的类,
你是正确的;指向存储在数组中的数据的指针符合随机访问迭代器的要求,即最"完整"的迭代器类型,因此基本上可以在任何标准库算法中使用它们。
我手头没有关于随机访问迭代器的完整参考标准,但可以参见这里;此外,这里有一个很好的图表,其中包含了迭代器的各种"类型"。
相关文章:
- 如何在C++中将迭代器作为函数参数传递
- 如何在 c++ 中将字符串迭代器变量传递给函数?
- 为什么我的模板化函数需要从一个迭代器转换到另一个迭代器?
- 如何创建迭代器函数
- 为什么在指向对象的迭代器上调用函数不允许我更改对象本身?
- 迭代器库中的 std::size() 不适用于传递给函数的 C 样式数组
- 使用迭代器的模板类的构造函数
- C++:复制迭代器的构造函数
- 基于函数而不是集合的二分搜索或迭代器?
- 成员函数中的迭代器出现问题
- 使用迭代器的自定义比较器函数
- 专门C++使用指针值类型的通用迭代器的模板函数?
- 从 std::vector 迭代器中执行函数指针
- 调用 erase() 函数是否也会在擦除元素之前更改迭代器值?
- 如何基于循环迭代器选择函数
- 矢量迭代器在尝试调用函数时使我的程序崩溃
- 成员函数不能为集合迭代器和const_iterator的输入重载(但可以为其他 STL 迭代器重载)
- 具有C++迭代器参数的多功能函数
- C++如何获取传递给函数(STL 迭代器)的参数的名称
- C++ 对自定义映射迭代器函数的未定义引用