对标题表示歉意,如果我知道如何更好地表达它,那么谷歌可能已经帮助了我......
我想要一个对象 Y,它代表容器 X 的视图,这样当我迭代 Y 时,它要么是 X 的前向迭代,要么是后向迭代。我想在不复制数据的情况下执行此操作,因此新的ranges
我想到了图书馆。
std::vector x{};
auto z = some_condition ? x : (x | std::views::reverse);
显然有以下类型x
and (x|...)
是不同的。我怎样才能使它们保持一致?
编辑:刚刚发现以下内容10年前提出的问题,我想我想找出的是,ranges
现在让事情变得更容易吗?由于该解决方案仍然需要将 for 循环逻辑放入单独的函数或 lambda 中。
显然 x 和 (x|...) 的类型是不同的。我怎样才能使它们保持一致?
不。让它们保持不同的类型,只需将它们传递给不太关心某一特定类型的事物即可。
您可以将使用转移到通用 lambda 中,然后有条件地使用以下任意一个调用它:x
or x | std::views::reversed
IE。代替
std::vector x{};
auto z = some_condition ? type_erase(x) : (x | std::views::reverse);
for (auto y : z) {
/* stuff */
}
// assign some value?
you have
auto do_stuff = [](auto && z) {
for (auto y : z) {
/* stuff */
}
// return some value?
};
std::vector x{};
some_condition ? do_stuff(x) : do_stuff(x | std::views::reversed);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)