我有三个关于C++作业分配的问题。目标是创建一个简单的回文方法。这是我该模板:for循环中的向量迭代器,返回语句,警告,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”,并且在rit之前我一直在获取有关需要“,”的错误。但是当我在for循环之外剪切和粘贴时,编译器没有错误。 (我正在使用VS 2008)。
第二个问题,我几乎只是放在这个脑袋上。但是,我在回文()方法中返回语句的方式正确吗?在我的脑海中,我认为它的工作原理就是,一旦* it和* rit不相等,那么该函数返回false,此时方法退出。否则,如果它完全通过for循环,那么它在最后返回true。我完全的脑子里放着如何返回报表如何工作,如果块和我试图在我的书中查找一个很好的例子,我找不到一个。
最后,我得到这样的警告:
\palindrome.h(14) : warning C4018: '<' : signed/unsigned mismatch
现在是因为我跑我的循环,直到(我< input.size()/ 2)和编译器告诉我,输入可以是负数?谢谢!
你不需要声明你的函数模板为'static'。 – 2010-06-10 04:00:04