Credo che poiché C++ 11, la funzione di erase
maggior parte dei contenitori (es std::vector
) accetta un const_iterator
come parametro:C++ 11: eliminare utilizzando un const_iterator
iterator erase (const_iterator position);
Still miei compilatori (GCC 4.8 e Clang 3.2, entrambi che usano GCC libstdC++) non mi permetteranno di usare tale funzione, anche quando compilo con --std=c++11
.
È un errore di compilatore/libstdC++ o ho fatto qualcosa di negativo? Si tratta di un codice di esempio:
#include <vector>
int main()
{
std::vector<int> v;
v.push_back(1);
v.push_back(2);
v.push_back(3);
std::vector<int>::const_iterator i = v.begin();
while(i != v.end()) {
i = v.erase(i);
}
return 0;
}
Questo sembra essere un problema con l'implementazione della libreria standard, non con il compilatore stesso –
@Andy: sì, se l'errore non è mio, è molto probabilmente di libstdC++. Sono comunque sorpreso che si tratti di un problema di libstdC++ (o del compilatore, in ogni caso), dal momento che ho trovato molte domande sulla cancellazione di un 'const_iterator', ma ** tutti ** di loro precedenti a C++ 11 .. – peoro