更简单的C++ STL迭代器实例化

Was*_*lap 6 c++ stl

有没有办法在语法上缩短/简化C++中的迭代器声明.通常我会:

vector<pair<string, int> > v;
vector<pair<string, int> >::iterator i;
Run Code Online (Sandbox Code Playgroud)

我希望有一些魔法:

vector<pair<string, int> > v;
magic v::iterator i;
Run Code Online (Sandbox Code Playgroud)

P0W*_*P0W 7

只需typedef用于别名你的vector<pair<string, int> >

typedef vector<pair<string, int> > Vp; // vector of pair
Run Code Online (Sandbox Code Playgroud)

然后,

Vp v;

Vp::iterator i;
Run Code Online (Sandbox Code Playgroud)


Tom*_*Tom 5

在C++ 11中,您有三个选择:

1. Typedef向量实例化

typedef std::vector<std::pair<std::string, int>> Vp;
Vp v;
Vp::iterator i;
Run Code Online (Sandbox Code Playgroud)

2.使用 decltype

std::vector<std::pair<std::string, int>> v;
decltype(v)::iterator i;
Run Code Online (Sandbox Code Playgroud)

3.使用 auto

std::vector<std::pair<std::string, int>> v;
auto i = v.begin();
Run Code Online (Sandbox Code Playgroud)

我会说第三个选项是最常见的惯用法,但都是有效的,第一个选项也适用于C++ 98.