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行的迭代器。我必须为任何数据类型制作回文检查器。是否有关于语法的问题或我们不能这样做。谢谢!
错误消息如下:
'end'未在此范围内声明
在此范围内未声明'start'
dependent-name'std :: vector :: iterator'被解析为非类型,但实例化产生类型
dependent-name'std :: vector :: iterator'被解析为非类型,但实例化会产生一个类型
预期';'在'结束'之前
预期';'在'开始'之前
在'std :: vector :: iterator'之前需要'typename',因为'std :: vector'是一个依赖范围
在'std :: vector :: iterator'之前需要'typename',因为'std :: vector'是一个依赖范围
'operator /'不匹配(操作数类型为'__gnu_cxx :: __ normal_iterator&gt;'和'int')
答案 0 :(得分:0)
尝试以下
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
答案 1 :(得分:0)
使用typename
typename vector<T>::iterator start = word.begin();