C++ 在运行时使用范围更新结果

C++ 在运行时使用范围更新结果,c++,range-v3,C++,Range V3,使用时,我注意到,当我存储range::views::method()操作的一些结果时,即使在事件(指令)之后,原始数据的每次更改或更新都会导致新构造的结果发生相同的更改 有联系,但模式是什么,我们应该知道什么 在本例中,我使用 对于值,第四个值被更改,对于值也被更改。是,因为这是范围::视图的预期行为。它应该是一些数据的非所有者视图。如果基础数据发生更改,则视图别无选择,只能查看这些更改,因为它没有自己的数据保持以前的状态 一个例外是ranges::views::single,它保留自己的底层

使用时,我注意到,当我存储
range::views::method()
操作的一些结果时,即使在事件(指令)之后,原始数据的每次更改或更新都会导致新构造的结果发生相同的更改

有联系,但模式是什么,我们应该知道什么

在本例中,我使用


对于
,第四个值被更改,对于
值也被更改。

是,因为这是
范围::视图
的预期行为。它应该是一些数据的非所有者视图。如果基础数据发生更改,则视图别无选择,只能查看这些更改,因为它没有自己的数据保持以前的状态


一个例外是
ranges::views::single
,它保留自己的底层数据副本。这里有一个。

是的,因为这是
范围::视图的预期行为。它应该是一些数据的非所有者视图。如果基础数据发生更改,则视图别无选择,只能查看这些更改,因为它没有自己的数据保持以前的状态


一个例外是
ranges::views::single
,它保留自己的底层数据副本。这里有一个。

一个例外是
单视图
@cppleener哦,真的吗?有趣的是,这是c++20吗?我在range-v3中找不到此项。它位于range-v3:。它是C++20的一部分。@cppleener是的,没错,谢谢,我不知道:)编辑了答案。一个例外是
单视图
@cppleener哦,真的吗?有趣的是,这是c++20吗?我在range-v3中找不到此项。它位于range-v3:。它是C++20的一部分。@CPP学习者是的,没错,谢谢,我不知道:)编辑了答案。
#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