在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
}
答案 0 :(得分:1)
你的代码错了。你不能那样使用end()
:
返回一个迭代器,引用向量容器中的 past-the-end 元素。
过去结束元素是跟随向量中最后一个元素的理论元素。它没有指向任何元素,因此不应被解除引用。
答案 1 :(得分:0)
我认为你没有正确使用std :: vector类。
void std :: vector :: pop_back()删除集合中的最后一个元素,有效地将容器大小减少一个。
函数std :: vector :: end()返回一个迭代器,在这种情况下是一个指向集合中最后一个元素的元素的指针。
此外,您发布的代码存在一些问题。 函数应返回一个类型。如果你想什么都不返回,那么返回void。