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