【问题标题】:Updating results during runtime with Ranges在运行时使用 Ranges 更新结果
【发布时间】:2023-03-09 12:29:01
【问题描述】:

使用Range library for C++14/17/20 extension 我注意到,当我存储range::views::method() 操作的一些结果时,在运行时,原始数据的每次更改或更新都会对其新构造的结果造成相同的更改,即使在事件(指令)。

有一个链接,但模式是什么,我们应该知道什么?

在这个例子中,我使用了ranges::views::reverse()

#include <iostream>
#include <vector>
#include <range/v3/all.hpp>

int main()
{

   std::vector<int> values{1,2,3,4,5};

   auto reversed = ranges::views::reverse(values);

   values[3] = 0;

   for(auto const& it : values){
    std::cout<<it<<" ";
   }

   std::cout<<std::endl;

   for(auto const& it : reversed){
    std::cout<<it<<" ";
   }

    return 0;
}

输出:

  1 2 3 0 5
  5 0 3 2 1

values 的第 4 个值已更改,reversed 也是如此。

【问题讨论】:

    标签: c++ range-v3


    【解决方案1】:

    是的,因为这是ranges::views 的预期行为。它应该是对某些数据的非拥有 view。如果底层数据发生变化,那么视图别无选择,只能看到这些变化,因为它没有自己的数据来保持之前的状态。

    ranges::views::single 是一个例外,它保留自己的基础数据副本。这是demo

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-15
    相关资源
    最近更新 更多