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

时间:2014-11-20 16:55:54

标签: c++ pointers

我有一个矢量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*。有什么建议?

3 个答案:

答案 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