从副本复制和弹出后,矢量的最后一个元素发生了变化

时间:2014-04-29 13:08:16

标签: c++ vector reference pop

在C ++中,我有一个函数,它应该将一个向量分割成它的最后一个元素和向量的其余部分。但是,我做了以下观察,我无法解释:

function(vector<int> indeces){
    // indeces = [1,2,3]
    vector<int> indeces_ = indeces;
    // indeces = [1,2,3] = indeces_
    indeces_.pop_back();
    // indeces = [1,2,3], indeces_ = [1,2]   
    // BUT: *indeces.end() != 3 but some unrelated integer
}

2 个答案:

答案 0 :(得分:1)

你的代码错了。你不能那样使用end()

  

返回一个迭代器,引用向量容器中的 past-the-end 元素。

     

过去结束元素是跟随向量中最后一个元素的理论元素。它没有指向任何元素,因此不应被解除引用。

答案 1 :(得分:0)

我认为你没有正确使用std :: vector类。

void std :: vector :: pop_back()删除集合中的最后一个元素,有效地将容器大小减少一个。

函数std :: vector :: end()返回一个迭代器,在这种情况下是一个指向集合中最后一个元素的元素的指针。

此外,您发布的代码存在一些问题。 函数应返回一个类型。如果你想什么都不返回,那么返回void。