gpt4 book ai didi

c++ - 从 pair 分配 vector

转载 作者:行者123 更新时间:2023-12-01 14:47:38 27 4
gpt4 key购买 nike

我想从第 3 方库提供的数据中构建一个 vector 。

lib 保存数据并提供对它的访问,如下所示:

const uint8_t* data;
std::pair<const uint8_t*, const uint8_t*> getvalue() const {
return std::make_pair(data + offset, data + length);
}

为了进一步处理这些数据,我将其放入 vector 中,但我想避免多次调用 getvalue如果可能的话,我也会避免创建变量。

这就是我现在的做法:
std::pair<const uint8_t*, const uint8_t*> dataPtrs = 3rdpartydata.getvalue();
vector<uint8_t> data(dataPtrs.first, dataPtrs.second);

它正在工作,但有什么方法可以让它变得更好/更简单?

最佳答案

结构化绑定(bind)

从 C++17 开始,您可以使用 structured bindings绑定(bind)firstsecond std::pair<...> 的成员来自 getvalue() 的返回值:

const auto [data_begin, data_end] = thirdpartydata.getvalue();
const std::vector<uint8_t> v(data_begin, data_end);

C++17 还介绍了 class template argument deduction ,这意味着您可以在 v 的声明中省略模板参数上,可以推导出:
const auto [data_begin, data_end] = thirdpartydata.getvalue();
const std::vector v(data_begin, data_end);
std::apply和一个通用的 lambda

或者,您可以使用另一个 C++17 特性 std::apply ,以及一个通用的 lambda (C++14):
const auto v = std::apply([](auto a, auto b) { return std::vector(a, b); }, 
thirdpartydata.getvalue());

注意 return 中使用类模板参数推导lambda 的声明。

关于c++ - 从 pair<first,last> 分配 vector ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62322085/

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