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

Last Element of Vector Changes After Making Copy and Popping from Copy

本文关键字:副本 最后一个 元素 变化      更新时间:2023-10-16

在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
}

您的代码是错误的。您不能以这种方式使用end()

返回一个迭代器,该迭代器引用向量容器中末尾元素后的

过去的结束元素是向量中最后一个元素之后的理论元素。它不指向任何元素,因此不应取消引用。

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

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

函数std::vector<type>::end()返回一个迭代器,在本例中,该迭代器是指向集合中最后一个元素之后的元素的指针

此外,您发布的代码也存在一些问题。函数应返回一个类型。如果您不想返回任何内容,则返回void。