gpt4 book ai didi

c++ - 如何使迭代器指向 C++ STL 中的预分配内存?

转载 作者:行者123 更新时间:2023-11-30 01:47:48 25 4
gpt4 key购买 nike

类似于下面的示例。线为其赋值。

{
uint8_t buffer[16];

#ifdef _WIN32
std::vector<uint8_t>::iterator it_begin;
it_begin._Ptr = (uint8_t*)buffer;
#else
std::vector<uint8_t>::iterator it_begin((uint8_t*)buffer);
#endif

std::vector<uint8_t>::iterator it_end = it_begin + 16;
}

好吧,让我尝试更具体一点。我想从原始指针调用“解析”函数。

funcA(uint8_t* in, int32_t len) {
// I would like to do:
parse(req_, in, in + len);
}


template<typename InputIterator>
std::tuple<result_type, InputIterator> parse(request& req, InputIterator begin, InputIterator end) {
while (begin != end) {
result_type result = consume(req, *begin++);
if (result == good || result == bad)
return std::make_tuple(result, begin);
}
return std::make_tuple(indeterminate, begin);
}

最佳答案

原始指针一种迭代器。因此,无论在何处请求迭代器,您始终可以将指针传递到预分配的缓冲区中。

uint8_t buffer[16];

uint8_t* begin = buffer;
uint8_t* end = buffer + 16;

因为你有一个数组类型,你可以使用 std::beginstd::end 来自动化查找开始和结束的过程;如果您以后需要更改数组大小,这将使事情变得更容易。

uint8_t* begin = std::begin(buffer);
uint8_t* end = std::end(buffer);

关于c++ - 如何使迭代器指向 C++ STL 中的预分配内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31139026/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com