Cannot create template<typename T> vector<T>::iterator in c++
本问题已经有最佳答案,请猛点这里访问。
1 2 3 4 5 6 7 8 9 10 11 | 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行创建as的迭代器。我必须为任何数据类型制作回文检查程序。语法是否有问题,或者我们不能这样做。谢谢!
错误信息如下:
"end"未在此范围中声明"start"未在此范围中声明依赖名称"std::vector::iterator"被分析为非类型,但实例化会生成一个类型依赖名称"std::vector::iterator"被分析为非类型,但实例化会生成一个类型"end"之前应输入";""start"之前应输入";""std::vector::iterator"之前需要"typename",因为"std::vector"是依赖范围"std::vector::iterator"之前需要"typename",因为"std::vector"是依赖范围"operator/"不匹配(操作数类型为"uu gnu_cxx::u normal_iterator>"和"int")。
型
使用
1 | typename vector<T>::iterator start = word.begin(); |
。
型
尝试以下操作
1 2 3 4 5 6 7 8 9 10 11 12 13 | 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; } |
这是一个测试
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | #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; } |
号
输出为
1 2 3 | true false true |