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

标签 c++ structured-bindings

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

相关文章:

c++ - 进程返回 139 (0x8B) 段错误

c++ - 如何在互斥锁中优先考虑特权线程?

c++ - C 样式字符串作为模板参数?

c++ - 将 size_t 转换为 vector<unsigned char>

还包括现有变量的 C++17 结构化绑定(bind)

c++ - Lambda 隐式捕获因从结构化绑定(bind)声明的变量而失败

c++ - std::ignore 与结构化绑定(bind)?

c++ - 当重载方法将模板类作为参数时会发生什么

c++ - const 上的结构化绑定(bind)