【问题标题】:C++ create a char* iteratorC++ 创建一个 char* 迭代器
【发布时间】:2013-06-28 10:45:00
【问题描述】:

我喜欢在我的代码中编写使用std 方法的容器无关代码,例如std::distance()std::advance()。这对于反序列化很有用,我可以传入不同类型的缓冲区对象(网络流、字节流……)。

如何将char*uint8_t* 指针转换为迭代器?将数据复制到缓冲区不是一种选择。

我想到的一个选择是使用带有std::string 的自定义分配器,但如果可用,我更喜欢现成的解决方案。
有什么建议吗?

【问题讨论】:

  • 指针迭代器——甚至是最通用的迭代器,随机访问
  • 指针是迭代器。请注意正确处理end()

标签: c++ c++11 iterator char std


【解决方案1】:

有几种类型的迭代器,由它们具有的属性(它们支持的功能)指定 - 这里有一个很好的概述http://www.cplusplus.com/reference/iterator/

随机访问迭代器需要实现该表中的所有迭代器功能。

原始指针实际上支持所有操作,因此是随机访问 operators 迭代器,可用于所有 STL 算法和容器。也在这里讨论Can raw pointers be used instead of iterators with STL algorithms for containers with linear storage?

虽然没有必要,但为指针实现迭代器包装器可能仍然有用 - 这也在上述问题的答案中进行了讨论。

【讨论】:

  • cppreference 的迭代器页面也可能有用。不太友好,但往往更可靠。
【解决方案2】:

没关系。这些指针无论如何都可以用作迭代器,因为它们实现了基本功能。

【讨论】:

    猜你喜欢
    • 2016-07-24
    • 2021-10-15
    • 1970-01-01
    • 2021-04-11
    • 1970-01-01
    • 2018-05-20
    • 2010-10-09
    • 2020-09-27
    • 1970-01-01
    相关资源
    最近更新 更多