Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/150.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ Range-v3视图::滑动(n)以返回元组(如果在编译时n已知)_C++_Range V3 - Fatal编程技术网

C++ Range-v3视图::滑动(n)以返回元组(如果在编译时n已知)

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]…

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]…);
}
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::cout
std::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';
}