【发布时间】:2019-09-11 05:02:29
【问题描述】:
假设我有一个类似于std::vector<std::tuple<Ts...>> 的容器。
由此,我想为所有T 获得一个“view”(非复制),这样我就可以对该视图进行操作,就好像它是一个类似标准的 容器。
所以我想要什么:
using tuple_vector = std::vector<std::tuple<int,float,double>>;
tuple_vector tuple_vec = {{1, 4.f, 8.},
{2, 5.f, 9.},
{3, 6.f, 10.},
{4, 7.f, 11.}}
auto int_view = view<int>(tuple_vec);
^^^
type should be some kind of non-owning reference
// what I would like to do
int_view[0] = 10; // modify
assert(int_view[0] == std::get<int>(tuple_vec[0])); // modification should modify tuple_vec as well
我尝试了std::transform,但随后我得到了所有int 的拥有副本。
std::vector<int> int_vec(tuple_vec.size());
std::transform(tuple_vec.begin(), tuple_vec.end(), int_vec.begin(), [&](const auto& elem) {
return std::get<int>(elem);
});
我不确定这是否可行,但如果可以,我将不胜感激任何提示或指示。
【问题讨论】:
标签: c++ vector tuples c++14 c++17