Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/5.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++ 通过子向量指针/视图/引用更新向量_C++_Pointers - Fatal编程技术网

C++ 通过子向量指针/视图/引用更新向量

C++ 通过子向量指针/视图/引用更新向量,c++,pointers,C++,Pointers,我有一个向量v,其大小为10,定义为 向量v(10,1) 例如,我想取一段v _v(&v[5],&v[10])的向量段 现在,我想更新segment\u of_v _v的_段=5*_v的_段 但我希望更新也能反映在原始向量v中 我试图通过将指针指向segment\u of_v来实现这一点,但是,我无法将此segment\u of_v*。有什么建议吗 您不能将段_/v作为向量,因为这将创建第二个不相关的向量 您可以执行int*segment\u of_v=&v[5],但这只会得到一个普通指针,不能

我有一个向量
v
,其大小为10,定义为
向量v(10,1)

例如,我想取一段
v

_v(&v[5],&v[10])的向量段

现在,我想更新
segment\u of_v

_v的_段=5*_v的_段

但我希望更新也能反映在原始向量
v


我试图通过将指针指向
segment\u of_v
来实现这一点,但是,我无法将此
segment\u of_v*
。有什么建议吗

您不能将
段_/v
作为
向量
,因为这将创建第二个不相关的
向量


您可以执行
int*segment\u of_v=&v[5]
,但这只会得到一个普通指针,不能像
向量那样使用。这可能很危险,因为当您操作原始的
v
时,它可能会被重新分配,并且该指针将变得无效。

为什么它如此复杂

你可以写得很简单

std::for_each( std::next( v.begin(), 5 ), v.end(), []( int &x ) { x *= 5; } );
或者,如果要像处理数组一样处理向量,则可以使用成员函数
data
。例如表达式

v.data() + 5

将给出范围的初始指针。

您可以使用


参见

你真的需要
v的段
成为
向量
?你需要
segment\u of_v
做什么吗?你正在寻找
array\u视图的一些变体。不幸的是,
array\u视图
不存在。然而,_v和v的段_应该是相同的类型。正如Kerrek所指出的,我正在寻找类似array_视图的东西。在我的问题中,我展示了一个转换作为示例。我想用v的段做很多算术运算。有时我想把这段代码传递给某个函数。因此,我需要对_v的段_进行系统的定义。@musafir您始终可以将一元函数对象传递给包装此
std::transform的包装器,我还显示了“一”示例;)
std::transform( v.begin() + 5, v.end(),        // start, end
                v.begin() + 5 ,                // destination
                []( int x ) { return x * 5; }  // Lambda
               );