我有一个 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/