template<typename T>
bool Palindrome(vector<T> word) {
vector<T>::iterator start = word.begin();
vector<T>::iterator end = word.end();
for (;start != (word.begin() + word.end())/ 2;start++) {
if (*start != *(--end)) {
return false;
}
}
return true;
}
我无法创建代码第 3 行中的迭代器。我必须为任何数据类型制作一个回文检查器。语法是否有问题,或者我们不能这样做。谢谢!
错误信息如下:
“结束”未在此范围内声明
“开始”未在此范围内声明
dependent-name 'std::vector::iterator' 被解析为非类型,但实例化产生类型
从属名称“std::vector::iterator”被解析为非类型,但实例化产生一个类型
预期的 ';'在“结束”之前
预期的 ';'在“开始”之前
在“std::vector::iterator”之前需要“typename”,因为“std::vector”是一个依赖范围
在“std::vector::iterator”之前需要“typename”,因为“std::vector”是一个依赖范围
不匹配“operator/”(操作数类型为“__gnu_cxx::__normal_iterator >”和“int”)
尝试以下操作
template<typename T>
bool Palindrome( const std::vector<T> &word )
{
typename std::vector<T>::const_iterator start = word.begin();
typename std::vector<T>::const_iterator end = word.end();
for ( ; start < word.begin() + word.size() / 2; ++start )
{
if ( *start != *--end ) return false;
}
return true;
}
这是一个测试
#include <iostream>
#include <iomanip>
#include <vector>
template<typename T>
bool Palindrome( const std::vector<T> &word )
{
typename std::vector<T>::const_iterator start = word.begin();
typename std::vector<T>::const_iterator end = word.end();
for ( ; start < word.begin() + word.size() / 2; ++start )
{
if ( *start != *--end ) return false;
}
return true;
}
int main()
{
std::vector<int> v = { 1, 2, 1 };
std::cout << std::boolalpha << Palindrome( v ) << std::endl;
v = { 1, 2, 3 };
std::cout << std::boolalpha << Palindrome( v ) << std::endl;
v = { 1, 2, 2, 1 };
std::cout << std::boolalpha << Palindrome( v ) << std::endl;
return 0;
}
输出是
true
false
true