c++ - 可以将原始指针传递给需要迭代器的模板函数吗?

标签 c++ pointers iterator

能否将原始指针传递给需要迭代器的模板函数?我是否认为迭代器只是一个覆盖指针相关运算符(例如 *、++ 等)的类,或者迭代器是否公开了指针不公开的任何其他接口(interface)?换句话说,指针“看起来像”迭代器吗?

例子:

我想使用 boost::algorithm::knuth_morris_pratt_search ( documentation here )。

我的语料库(要搜索的字符串)和模式(要查找的字符串)只是内存中的字节 - 我有一个包含起始地址和字节长度的指针。为了论证,假设它是一个 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);

最佳答案

Am I right in thinking that an iterator is just a class which overrides the pointer-related operators (e.g. *, ++, etc.),

你是对的;指向存储在数组中的数据的指针符合随机访问迭代器的要求,即最“完整”的迭代器类型,因此您几乎可以在任何标准库算法中使用它们。

我手头没有关于随机访问迭代器的完整引用标准,但请参阅例如here ;还有,here是具有各种“类型”的迭代器的漂亮图表。

关于c++ - 可以将原始指针传递给需要迭代器的模板函数吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15538523/

相关文章:

c++ - vector 是否比堆数组更严格地检查越界?

c++ - 函数返回windows安装的驱动器?

java - 如何在 Java 中修改 PriorityQueue 的元素?

c++ - 找到 cin 和 ifstream 的流结尾?

c++ - 我应该在使用之前检查 boost::shared_ptr 或 std::shared_ptr 吗?

c - 用任意数初始化指针

c++ - 使用临时地址安全吗?

c - 由于指针 (C),流水线理念不起作用

generics - 在Rust中编写一个将可迭代容器作为参数的泛型函数

c++ - 输出迭代器的 value_type