c++ - 将 C uint8_t 指针 + 大小组合转换为 C++ 迭代器

标签 c++ c pointers c++11 iterator

我有一些 C 代码,我想用 C++ 封装以使其更易于使用。

C 代码使用uint8_t*/size_t 对来引用一 block 内存。我可以将它们转换为 C++ 迭代器,比如 std::begin/std::end 吗?我知道这些函数不接受指针,但也许还有其他方法。我想避免必须复制任何数据。

我正在寻找的是这样的:

void fn(uint8_t* ptr, size_t size) {
    auto begin = std::begin(...);
    auto end = std::end(...);

    // continue to use begin/end similar to std::vector<uint8_t>::iterator
}

迭代器应该可以与标准库一起使用。具体来说,我想将它与 std::copy 和采用迭代器的 std::vector 构造函数一起使用。我知道我有其他选项来复制内存,但我正在寻找 C++ 类型的封装。

我也试过这个,但显然这是一个私有(private)构造函数。 (对我来说,我无法构建 vector 迭代器是完全合理的,但我只是在尝试。)

std::vector<uint8_t>::iterator begin(ptr);

我还希望避免必须实现我自己的迭代器类型。

最佳答案

auto begin = ptr;
auto end = ptr+size;

会成功的
(迭代器实际上是仿照指针建模的)

关于c++ - 将 C uint8_t 指针 + 大小组合转换为 C++ 迭代器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28742524/

相关文章:

C打印 double 类型指针值不起作用

c - 分配结构指针数组

c - 使用函数返回指针作为左值

c++ - 获取 scons 以生成新的内部版本号

C++ 枚举 : Assign a variable or use scope resolution?

c++ - 如何在C++中匹配两个不同的图像

C++是否可以确定指针是否指向有效对象?

c++ - boost::odeint 在成员类中调用

c++ - 未定义行为的意义何在?

pointers - 指向 Golang 中的结构