2011-05-06 7 views
5

CÓDIGO A 'RCIT = std :: vector <_Tp, _Alloc> :: rend() con _TP = int, _Alloc = std :: asignador!':error iterador inverso: no puede competir con 'operador! =' En

vector<int>::const_reverse_iterator rcit; 
vector<int>::const_reverse_iterator tit=v.rend(); 
for(rcit = v.rbegin(); rcit != tit; ++rcit) 
cout << *rcit << " "; 

CÓDIGO B:

vector<int>::const_reverse_iterator rcit; 
for(rcit = v.rbegin(); rcit != v.rend(); ++rcit) 
cout << *rcit << " "; 

CÓDIGO a funciona bien, pero ¿por qué CÓDIGO B throughs de error:!

DEV C++ \ vector_test.cpp no puede competir con 'operador! =' en 'RCIT = std :: vecto r < _Tp, _Alloc> :: rend() con _Tp = int, _Alloc = std :: allocator '.

Este es el programa que estaba tratando de escribir.

#include <iostream> 
using std::cout; 
using std::cin; 
using std::endl; 
using namespace std; 
#include <vector> 
using std::vector; 
template< typename T > void printVector(const vector<T> &v); 

template< typename T > 
void printVector(const vector<T> &v) 
{ 
      typename vector<T>::const_iterator cit; 
      for(cit = v.begin(); cit != v.end(); ++cit) 
      cout << *cit << " "; 
} 

int main() 
{ 
    int number; 
    vector<int> v; 

    cout << "Initial size of the vector : " << v.size() 
     << " and capacity : " << v.capacity() << endl; 
    for(int i=0; i < 3; i++) 
    { 
      cout << "Enter number : "; 
      cin >> number; 
      v.push_back(number); 
    } 
    cout << "Now size of the vector : " << v.size() 
     << "and capacity : " << v.capacity() << endl; 

    cout << "output vector using iterator notation " << endl; 
    printVector(v); 

    cout << "Reverse of output "; 
    vector<int>::const_reverse_iterator rcit; 
    for(rcit = v.rbegin(); v.rend() != rcit ; ++rcit) 
    cout << *rcit << " "; 
    cin.ignore(numeric_limits<streamsize>::max(), '\n'); 
    cin.get(); 
return 0; 
} 
+0

Publique un código más ... el código que ha publicado no es el problema ... – Nawaz

+0

bien, solo una minuto – munish

+0

su código compila para mí muy bien con mingw en windows – Vusak

Respuesta

8

El problema es que hay dos formas del método rend:

reverse_iterator rend(); 
const_reverse_iterator rend() const; 

Al hacer la comparación parece que el primero se está utilizando (aunque no sé por qué), y el operador != para comparar un 'const' y un iterador 'no const' no está definido. Sin embargo, al asignar a la variable, el compilador puede deducir la función correcta para llamar y todo funciona correctamente.

+0

P.S. Su programa funciona bien para mí compilar con gcc en Linux. – sje397

+0

Gracias, sje397 esto hace más seguro que la falla puede ser con mi compilador DevC++ 4.9.9.2. No sé mucho sobre compiladores, lo obtuve en línea y comencé a usarlo. No sé qué compilador es adecuado para aprender y practicar C++. ¿Puede sugerirme algo? – munish

+1

Sugeriría el compilador de Visual Studio en Windows (hay una edición 'express' gratuita) y gcc en otro lugar - Apenas he tocado nada más. – sje397

-1

intentar cambiar los operandos de = la siguiente manera:!

for(rcit = v.rbegin(); v.rend() != rcit; ++rcit) 
+0

¡Eso no tiene sentido! – Nawaz

+0

sí, lo intenté, no funcionó – munish

+0

@Nawaz: en algunas implementaciones de STL asqueroso lo hace – ognian

2

que no reciben ningún error o advertencia cuando compilo el siguiente en Xcode 4 o teclado:

#include <iostream> 
#include <vector> 

int main() { 
    using namespace std; 
    vector<int> v; 

    vector<int>::const_reverse_iterator rcit; 
    for(rcit = v.rbegin(); rcit != v.rend(); ++rcit) 
     cout << *rcit << " "; 
} 

¿Su programa se diferencia de esta en forma significativa? Qué compilador estas usando? ¿Funciona la sugerencia de Ognian? ¿Y qué pasa si reemplaza el != con un ==? (Sé que causaría un error en tiempo de ejecución, pero tengo curiosidad acerca de la respuesta del compilador a esto.)

+0

Nota: Su listado completo del programa compila bien también. –

+0

La sugerencia de No @ ognian no funcionó.y acabo de copiar tu código y pegué y ejecuté el mismo error, quizás sea mi compilador de DevC++ versión 4.9.9.2. No lo intenté == aunque. @ Vusak también compiló mi código y estuvo bien – munish

+0

Gracias, sí lo hace como casi todos los de arriba y abajo lo hicieron. Es el compilador. Tengo que probarlo en otro lugar – munish

Cuestiones relacionadas