如何加入范围范围?

Posted

技术标签:

【中文标题】如何加入范围范围?【英文标题】:How to join range of ranges? 【发布时间】:2021-09-13 21:09:12 【问题描述】:

auto points() const
    
        auto ranges = children() | std::views::transform([](auto child)  return child->points(); );
        return std::views::join(ranges);
    

不能使用积分

for(auto& pt: points())

错误没有运算符 "!=" 匹配这些操作数

【问题讨论】:

【参考方案1】:

一切都取决于 children()child::points() 究竟返回什么。

如果children() 按值返回一个容器,那么您正在创建一个悬空的适配器(通过| 的管道)——它的迭代器不能被取消引用。

此外,child::points() 必须返回 view。退回容器将不起作用。

这是一个工作示例:

#include <iostream>
#include <vector>
#include <ranges>

struct child 
    std::vector<int> points_1, 2, 3;

    const auto& points() const 
        return points_;
    
;

struct element 
    std::vector<child> children_, ;

    const auto& children() const 
        return children_;
    

    auto points() const 
        auto ranges = children() | std::views::transform([](auto& child) 
            return std::views::all(child.points());
        );
        return std::views::join(ranges);
    

;

int main() 
    auto e = element();
    for (auto x : e.points()) 
        std::cout << x << ' ';
    

注意访问器(child::points()element::children())如何通过 const&amp; 返回。

【讨论】:

join() 完美。它可以加入范围范围

以上是关于如何加入范围范围?的主要内容,如果未能解决你的问题,请参考以下文章

如何将单个日期列加入时间范围表

我如何查询给定日期范围的mysql并加入两个表?

matlab中如何设定坐标的范围及其步长值?

如何使用jQuery在元素的内部文本的最后一个单词周围包裹一个范围?

加入带有日期范围的熊猫时间序列

SQL 加入日期范围?