【发布时间】:2018-08-01 22:46:08
【问题描述】:
我创建了一个简单的 C++ 程序来测试erase() 在 C++ 向量中的行为。
这是我的代码:
#include <iostream>
#include <vector>
using namespace std;
int main() {
// your code goes here
vector<int> vec;
vec.push_back(3);
vec.push_back(4);
vec.push_back(5);
cout << vec[0] << " " << vec[1] << " " << vec[2] << endl;
vec.erase(vec.end());
//vec.erase(vec.begin());
cout << vec.size() << endl;
vec.push_back(12);
vec.push_back(10);
cout << vec[0] << " " << vec[1] << " " << vec[2] << endl;
return 0;
}
问题是上面的代码在尝试从向量中擦除最后一个元素时给出了分段错误。但是当我使用 begin() 删除第一个元素时,它工作正常。我无法理解其背后的原因。任何帮助将不胜感激。
【问题讨论】:
-
@KillzoneKid 不,
.back()相当于*(.end() - 1)。它返回对最后一个元素的引用,而不是迭代器。您不能使用它来擦除矢量的元素。 -
@FantasticMrFox 这么近,这么远;)