如何创建没有类型名称的迭代器?

Sky*_*fer 2 c++ templates iterator std c++03

例如,我有一个std::map<int, string> _m;,我想迭代它.所以我必须写下这样的东西:std::map<int, string>::iterator it = _m.begin().

问题是是否可以在不使用类型名称的情况下创建迭代器.编译器知道_m迭代器创建时的类型,为什么我需要自己编写这些类型呢?

更新我忘了说我要使用旧的C++标准.

mea*_*gar 6

你在auto关键字之后:

auto it = _m.begin();
Run Code Online (Sandbox Code Playgroud)

编译器在创建迭代器时知道_m的类型,那么为什么我需要自己编写这些类型呢?

是的,这是导致引入的确切逻辑auto.

如果你不能使用C++ 11,你会遇到类似的问题typedef.引入新标准的全部原因auto是因为您面临的确切问题 - 必须始终手动写出长类型名称是很尴尬的.

typedef std::map<int, string>::iterator map_itr;

map_itr it = _m.begin();
Run Code Online (Sandbox Code Playgroud)

  • @SkySurfer然后你错过了`typedef``typedef`本身应该是你的类型真相的来源.其他一切都应该使用typedef.如果您的类型发生了变化,您应该更改`typedef`,而不是其他任何内容.否则,请听:我告诉你,C++ 11引入`auto`的全部原因是为了解决这个问题.显然,在此之前**没有好的解决方案**,或者他们不会在语言中添加"auto".您之后的解决方案是'auto`关键字**,但您无法使用它,因此请停止询问该确切的解决方案.它在C++ 11之前不存在. (2认同)