为什么标准定义end()为一个结束而不是实际结束?
我使用时它是否正常(无效)
vector<T> v;
v.erase(v.end());
Run Code Online (Sandbox Code Playgroud)
我想用类似的东西
v.erase(std::find(...));
Run Code Online (Sandbox Code Playgroud)
我应该if是v.end()还是不是?
在C++.com和CPPreference上没有关于它的信息
我创建了一个简单的C++程序来测试C++向量中erase()的行为.
这是我的代码:
#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;
}
Run Code Online (Sandbox Code Playgroud)
问题是上面的代码在尝试擦除向量中的最后一个元素时给出了分段错误.但是当我使用begin()擦除第一个元素时,它工作正常.我无法理解它背后的原因.任何帮助将受到高度赞赏.