带模板的c ++迭代器

sfl*_*lee 9 c++ iterator

我有一个关于如何在模板方式下使用迭代器的问题.
这是我想要做的一个例子,问题是,在for循环中如何初始化迭代器pp?

我读过类似的问题,但我不能完全理解,因为我是初学者.
迭代器类型应该在这个C++模板中应该是什么?
任何人都可以帮助并提供一些简单的解释吗?

#include <iostream>
#include <vector>

template <class T>
void my_print(std::vector<T> input){
    for(std::vector<T>::iterator pp = input.begin(); pp != input.end(); ++pp)
        std::cout << *pp << "\n";
}
int main(int argc,char* argv[]){
    std::vector<int> aa(10,9);
    my_print(aa);

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我得到的错误消息:
'std :: vector :: iterator'被解析为非类型,但实例化产生一个类型

Vla*_*adp 17

typename之前添加一个iterator

#include <iostream>
#include <vector>

template <class T>
void my_print(std::vector<T> input)
{
    for (typename std::vector<T>::iterator pp = input.begin(); pp != input.end(); ++pp)
    {
        std::cout << *pp << "\n";
    }
}
int main(int argc, char* argv[])
{
    std::vector<int> aa(10, 9);
    my_print(aa);

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

来源:http://www.daniweb.com/software-development/cpp/threads/187603/template-function-vector-iterator-wont-compile

  • 你能解释一下为什么“typename”是必要的吗?其背后的直觉是什么?是否建议使用“typename”或“class”? (2认同)