C++ Range-v3视图::滑动(n)以返回元组(如果在编译时n已知)
range-v3中是否有类似的视图可以返回元组C++ Range-v3视图::滑动(n)以返回元组(如果在编译时n已知),c++,range-v3,C++,Range V3,range-v3中是否有类似的视图可以返回元组 类似于滑动的东西假设这不完全是您的想法,但您可以编写如下内容: std::vector v{1,2,3}; for (auto&& t : v | view::sliding(2)) { auto&& [first, second] = t; // error - t is a range } 模板 自动辅助程序(T&&rng,标准::索引\U序列){ 返回std::make_tuple(rng[I]…
类似于滑动的东西假设这不完全是您的想法,但您可以编写如下内容:
std::vector v{1,2,3};
for (auto&& t : v | view::sliding(2)) {
auto&& [first, second] = t; // error - t is a range
}
模板
自动辅助程序(T&&rng,标准::索引\U序列){
返回std::make_tuple(rng[I]…);
}
int main(){
std::向量v{1,2,3,4,5};
用于(自动和t:v |范围::视图::滑动(3)){
auto&[first,second,third]=helper(t,std::make_index_sequence{});
std::cout您可以zip
一起range
使用drop(range,i)
为[1,n)
()中的所有i
:
std::向量v{1,2,3};
名称空间视图=范围::视图;
for(auto[first,second]:view::zip(v,view::drop(v,1))){
std::coutstd::tie
似乎比std::make_tuple
好。a到数组(\u ref
)似乎更合适,顺便说一句。对于较大的n
,您仍然可以使用带有std::make_index_sequence
和返回范围::视图::zip(范围::视图::drop(v,Is);
。
template <typename T, size_t... I>
auto helper(T&& rng, std::index_sequence<I...>) {
return std::make_tuple(rng[I]...);
}
int main() {
std::vector v{1,2,3,4,5};
for (auto&& t : v | ranges::view::sliding(3)) {
auto&& [first, second, third] = helper(t, std::make_index_sequence<3>{});
std::cout << first << ", " << second << ", " << third << std::endl;
}
}
std::vector v{1,2,3};
namespace view = ranges::view;
for (auto [first, second] : view::zip(v, view::drop(v, 1))) {
std::cout << first << ", " << second << '\n';
}