c++ - 无法在 C++ 中创建模板<typename T> vector<T>::iterator

标签 c++ stl iterator

<分区>

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

关于c++ - 无法在 C++ 中创建模板<typename T> vector<T>::iterator,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23432072/

相关文章:

c++ - STL:重载和getter方法

c++ - 这是操纵 C++ 容器元素的正确方法吗?

c++ - 如何从 Mask 中获取减去的视频

c++ - remove_if 有问题(删除几次后停止删除)

c++ - 声明一个集合 C++

c++ - 设计一个重新散列函数......如何避免相同的散列?

c++ - STL 数据结构的输出参数与堆栈返回值的效率

c++ - 为什么不为 std::vector 重载 operator+=()?

php - 我应该在 PHP 中使用 Iterator 的哪个实现,为什么?

java - SQL迭代器的实现