Почему с помощью vector.erase(vector.end())
производитСтирание vector.end() не
Segmentation fault (core dumped)
при использовании этого кода:
#include <iostream>
#include <vector>
using namespace std;
void printMe(vector<int>& v){ for(auto &i:v) cout<<i<<" "; cout<<"\n"; }
int main() {
vector<int> c = { 1,2,3,4,5,6,7,8};
printMe(c);
c.erase(c.begin());
printMe(c);
c.erase(c.begin());
printMe(c);
// c.erase(c.end()); //will produce segmentation fault
// printMe(c);
return 0;
}
Я немного нового в этих итераторов, так что поймал меня охранник. Хотя я знаю, существует vector.pop_back()
. Мне любопытно узнать, что именно вызывает это.
A link к программе.
'vector.end()' - это итератор прошедшего конца. Он не указывает на элемент, который можно стереть. –
@ T.C. теперь мне любопытно, почему .end() указывает на прошлые, любые варианты использования? потому что конец обычно ссылается на последний элемент, поскольку я получаю от begin-> указание на 1-й элемент. –
http://stackoverflow.com/questions/9963401/why-are-standard-iterator-ranges-begin-end-instead-of-begin-end – user657267