Tengo tres preguntas con respecto a una tarea asignada para C++. El objetivo era crear un método de palíndromo simple. Aquí está mi plantilla para que:Iteradores de vectores en bucles for, declaraciones de devolución, advertencia, C++
#ifndef PALINDROME_H
#define PALINDROME_H
#include <vector>
#include <iostream>
#include <cmath>
template <class T>
static bool palindrome(const std::vector<T> &input)
{
std::vector<T>::const_iterator it = input.begin();
std::vector<T>::const_reverse_iterator rit = input.rbegin();
for (int i = 0; i < input.size()/2; i++, it++, rit++)
{
if (!(*it == *rit)) {
return false;
}
}
return true;
}
template <class T>
static void showVector(const std::vector<T> &input)
{
for (std::vector<T>::const_iterator it = input.begin(); it != input.end(); it++) {
std::cout << *it << " ";
}
}
#endif
En cuanto al código anterior, se puede tener más de un iterador declara en la primera parte del bucle? Intenté definir tanto el "it" como el "rit" en el método palindrome(), y seguí recibiendo un error sobre la necesidad de un "," antes de rit. Pero cuando corté y pegué fuera del bucle for, no hay errores del compilador. (Estoy usando VS 2008).
La segunda pregunta, me acabo de salir el cerebro me pedí un tizón en esta. Pero, ¿está bien la forma en que tengo mis declaraciones de devolución en el método palindrome()? En mi cabeza, creo que funciona, una vez que * it y * rit no se igualan, la función devuelve false y el método sale en este punto. De lo contrario, si recorre todo el ciclo for, entonces devuelve verdadero al final. Me tiré un tizón al cerebro sobre cómo funcionan las declaraciones de devolución en los bloques y traté de buscar un buen ejemplo en mi libro y no pude encontrar uno.
Por último, me sale esto advertencias:
\palindrome.h(14) : warning C4018: '<' : signed/unsigned mismatch
ahora es que ya tengo mi bucle hasta que (i < input.size()/2) y el compilador es que me decía que de entrada puede ser negativo ? ¡Gracias!
No es necesario declarar las plantillas de función 'static'. –