来自具有大小的 char * 缓冲区的双向迭代器
Bidirectional iterator from char * buffer with size
我似乎无法找到一个简单的解决方案,如何从 char *buffer
中获取双向迭代器并定义 bufferSize
。我不想将缓冲区复制到 std::string
(太贵了),我只想要 std_whatever::buffer_wrapper myWrappedBuffer(myBuffer, mySize);
之类的东西,然后在 <algorithm>
中使用 myWrappedBuffer.begin()
和 myWrappedBuffer.end()
功能。最简单的方法是什么?我真的不想自己实现迭代器。我知道有 boost::string_ref
,也许 std::string_view
,但我不想为此使用 boost,也不能使用 c++17。
char *b=buffer;
这是您的起始迭代器。
char *e=buffer+buffersize;
这是您的结束迭代器。
普通的、普通的指针不仅满足双向迭代器的所有要求,而且满足随机访问迭代器的所有要求,并且通常可以在需要任何类型迭代器的任何地方使用,并且它们将像一个迭代器一样工作。所有(写得很好的)基于迭代器的模板都可以很好地处理指针。
您甚至可以将它们提供给 std::iterator_traits
,并获得有意义的结果。亲自尝试一下,看看会发生什么。
我似乎无法找到一个简单的解决方案,如何从 char *buffer
中获取双向迭代器并定义 bufferSize
。我不想将缓冲区复制到 std::string
(太贵了),我只想要 std_whatever::buffer_wrapper myWrappedBuffer(myBuffer, mySize);
之类的东西,然后在 <algorithm>
中使用 myWrappedBuffer.begin()
和 myWrappedBuffer.end()
功能。最简单的方法是什么?我真的不想自己实现迭代器。我知道有 boost::string_ref
,也许 std::string_view
,但我不想为此使用 boost,也不能使用 c++17。
char *b=buffer;
这是您的起始迭代器。
char *e=buffer+buffersize;
这是您的结束迭代器。
普通的、普通的指针不仅满足双向迭代器的所有要求,而且满足随机访问迭代器的所有要求,并且通常可以在需要任何类型迭代器的任何地方使用,并且它们将像一个迭代器一样工作。所有(写得很好的)基于迭代器的模板都可以很好地处理指针。
您甚至可以将它们提供给 std::iterator_traits
,并获得有意义的结果。亲自尝试一下,看看会发生什么。