我有一个矢量v
,其大小为10,定义为
vector<int> v(10, 1);
我想拍摄一段v
,例如
vector<int> segment_of_v(&v[5], &v[10]);
现在,我想更新segment_of_v
segment_of_v = 5 * segment_of_v;
但我希望这样更新也会反映在原始向量v
中。
我试图通过指向segment_of_v
来做到这一点,但我无法做出segment_of_v*
。有什么建议?
答案 0 :(得分:2)
您无法segment_of_v
成为vector<int>
,因为这会创建第二个无关的vector
。
你可以int* segment_of_v = &v[5]
,但这只会得到一个普通的指针,不能像vector
一样使用。这可能很危险,因为当您操纵原始v
时,它可能会重新分配,并且此指针将变为无效。
答案 1 :(得分:2)
为什么这么复杂?
你可以写简单
std::for_each( std::next( v.begin(), 5 ), v.end(), []( int &x ) { x *= 5; } );
或者,如果您想像使用数组一样使用向量,那么您可以使用成员函数data
。例如表达式
v.data() + 5
将给出范围的初始指针。
答案 2 :(得分:1)
您可以使用std::transform
std::transform( v.begin() + 5, v.end(), // start, end
v.begin() + 5 , // destination
[]( int x ) { return x * 5; } // Lambda
);
请参阅here