Tengo un problema al usar iteradores inversos const en contenedores no const con gcc. Bueno, solo ciertas versiones de gcc.gcc reverse_iterator operadores de comparación faltantes?
#include <vector>
#include <iostream>
using namespace std;
int main() {
const char v0[4] = "abc";
vector<char> v(v0, v0 + 3);
// This block works fine
vector<char>::const_iterator i;
for (i = v.begin(); i != v.end(); ++i)
cout << *i;
cout << endl;
// This block generates compile error with gcc 3.4.4 and gcc 4.0.1
vector<char>::const_reverse_iterator r;
for (r = v.rbegin(); r != v.rend(); ++r)
cout << *r;
cout << endl;
return 0;
}
Este programa se compila y se ejecuta bien con gcc 4.2.1 (Mac Leopard) y con Visual Studio 8 y 9 (Windows) y con gcc 4.1.2 (Linux).
Sin embargo, hay un error de compilación con gcc 3.4.4 (cygwin) y con gcc 4.0.1 (Mac Snow Leopard).
test.cpp:18: error: no match for 'operator!=' in 'r != std::vector<_Tp, _Alloc>::rend() [with _Tp = char, _Alloc = std::allocator<char>]()'
¿Esto es un error en las versiones anteriores de gcc?
Debido a otros problemas con gcc 4.2.1 en Mac, necesitamos usar gcc 4.0.1 en Mac, así que simplemente usar el compilador más nuevo no es la solución perfecta para mí. Así que supongo que necesito cambiar la forma en que uso los iteradores inversos. ¿Alguna sugerencia?
Para una solución alternativa, ¿funcionaría '! (R == v.rend())'? Alternativamente, puede intentarlo con la versión no inversa a través de 'r.base()'. –
Es más probable que sea una omisión; Creo que el soporte completo para todo el STL * está * en curso, aunque muy cerca. En los días de 3.4.4 estaba algo incompleto. – meagar
@gf Buen intento, "! (R == v.rend())" no funciona. Ambos operadores "! =" Y "==" faltan. –