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
);