首页 > 解决方案 > c ++如何在不改变end()的情况下擦除元素

问题描述

我试图按如下方式从向量中删除一个元素,但为什么第一个输出与第二个输出不同?有什么方法可以避免这种情况或有更好的方法来删除元素吗?

int main() {
    vector<int> test = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
    cout << *test.end() << endl;
    test.erase(test.begin() + 2);
    cout << *test.end() << endl;
    return 0;
}

标签: c++vectorstl

解决方案


std::vector::end将迭代器返回到最后一个元素之后的元素,对其取消引用会导致 UB,意味着一切皆有可能,只是没有意义。

返回指向容器最后一个元素之后的元素的迭代器。

该元素充当占位符;尝试访问它会导致未定义的行为。

您可能会使用std::vector::back来获取最后一个元素;(最好提前检查是否vector为空。)

int main() {
    vector<int> test = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
    cout << test.back() << endl;
    test.erase(test.begin() + 2);
    cout << test.back() << endl;
    return 0;
}

推荐阅读