【发布时间】:2010-06-10 03:49:12
【问题描述】:
我有三个关于 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 循环的第一部分声明多个迭代器吗?我尝试在 palindrome() 方法中同时定义“it”和“rit”,但我不断收到关于在 rit 之前需要“,”的错误。但是当我在 for 循环之外剪切和粘贴时,编译器没有错误。 (我使用的是 VS 2008)。
第二个问题,我几乎只是在这个问题上放屁。但是我在回文()方法中返回语句的方式可以吗?在我的脑海中,我认为它的工作方式类似于,一旦 *it 和 *rit 不相等,则函数返回 false,此时方法退出。否则,如果它一直通过 for 循环,那么它在最后返回 true。我完全不知道 return 语句在 if 块中是如何工作的,我试着在我的书中查找一个很好的例子,但我找不到。
最后,我收到以下警告:
\palindrome.h(14) : warning C4018: '<' : signed/unsigned mismatch
现在是因为我运行我的 for 循环直到 (i
【问题讨论】:
-
你不需要声明你的函数模板
static.