У меня есть три вопроса относительно домашнего задания для 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
Что касается приведенного выше кода, можете ли вы иметь более одного итератора, объявленного в первой части цикла for? Я попытался определить «it» и «rit» в методе palindrome (), и я продолжал получать сообщение об ошибке «,» перед rit. Но когда я вырезаю и вставляю вне цикла for, ошибок компилятора нет. (Я использую VS 2008).
Второй вопрос, я просто пьянею по этому поводу. Но нормально ли то, что у меня есть мои операторы return в методе palindrome ()? В моей голове, я думаю, что это работает так, как только * it и * rit не равны друг другу, тогда функция возвращает false, и метод завершается в этой точке. В противном случае, если он проходит весь цикл for, он возвращает true в конце. Я полностью размышлял о том, как работают операторы return в случае блоков, и я попытался найти хороший пример в своей книге, но не смог его найти.
Наконец, я получаю это предупреждение:
\palindrome.h(14) : warning C4018: '<' : signed/unsigned mismatch
Это потому, что я запускаю цикл for до (i