gpt4 book ai didi

c++ - 结构化绑定(bind)以获取子 vector 的连续元素而无需复制

转载 作者:行者123 更新时间:2023-12-03 08:33:51 25 4
gpt4 key购买 nike

我有一个 std::vector<T> vec其中感兴趣的 3 个元素的连续 block 。为了便于处理,我想提取这些元素。目前,代码如下所示:

const T& a = vec[i];
const T& b = vec[i + 1];
const T& c = vec[i + 2];

我想使用结构化绑定(bind)来压缩 a 的提取, b , c到单行。

一个简单的选项将类似于以下内容:
std::tuple<T, T, T> getElement(int i) {
return std::make_tuple(vec[i], vec[i+1], vec[i+2]);
}

// ...
auto [a, b, c] = getElement(j);

问题是我想避免无用的数据复制。我不确定,但似乎 vector 元素将在这里复制到元组中。将使用 std::tuple<T&, T&, T&>可以选择吗?

最佳答案

Would using std::tuple<T&, T&, T&> be an option?



会的,而且标准库中已经有一个实用程序: std::tie .
它接受任意数量的引用(甚至对不同类型的引用),并返回对相同对象的引用元组。所以你的用例可以浓缩为
auto getElement(int i) {
return std::tie(vec[i], vec[i+1], vec[i+2]);
}

关于c++ - 结构化绑定(bind)以获取子 vector 的连续元素而无需复制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58244164/

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