如何创建模板类型的迭代器的STL对象?

Abh*_*jit 2 c++ iterator stl g++ visual-c++

如何创建模板类型的迭代器的STL对象?我正在尝试创建一个模板类型的迭代器的STL对象(比如Vector),如下所示

vector<vector<T>::iterator> it1;
Run Code Online (Sandbox Code Playgroud)

这在g ++和VC++中都失败了.两个编译器几乎都说同样的事情

克++

Main.cpp:8:49: error: type/value mismatch at argument 1 in template parameter li
st for `template<class _T1, class _T2> struct std::pair'
Main.cpp:8:49: error:   expected a type, got `std::vector<T>::iterator'
Run Code Online (Sandbox Code Playgroud)

VC++

error C2923: 'std::vector' : 'std::vector<T>::iterator' is not a valid template type argument for parameter '_Ty'
Run Code Online (Sandbox Code Playgroud)

如果你正在创建一个混凝土类型的迭代器,那么它就是一个例子

vector<vector<int>::iterator> it1;
Run Code Online (Sandbox Code Playgroud)

这是一个最小的失败的例子

#include<vector>
#include<iterator>
using namespace std;
template<typename T>
class Spam {
public:
    vector<vector<int>::iterator> it1; #Compiles Fine
    vector<vector<T>::iterator>   it2; #Fails
    };
Run Code Online (Sandbox Code Playgroud)

注意

我从答案中理解的是,如果依赖类型,那么需要为关键字添加前缀typename.如果是那样的话

vector< vector<T>  >  it;
Run Code Online (Sandbox Code Playgroud)

也应该失败,但事实并非如此.它似乎只是失败,并且typename如果依赖名称是a ,则需要关键字typedef

inf*_*inf 5

您必须添加typename关键字:

vector<typename vector<T>::iterator>   it2; 
Run Code Online (Sandbox Code Playgroud)

这个页面帮助我最了解它.