2

有没有比键入更有效的方法来引用容器迭代器的类型名

std::unordered_map<keyclass, valueclass>::iterator 

每次我需要迭代器?

当然,还有

typedef boost::unordered_map<keyclass, valueclass>::iterator classitr

但是为每个容器引入 typedef 并没有让我觉得它是非常易读的代码。作为 C++ 的新手,并假设一个人通常会引用他们想要使用的容器 - 是否有类似的东西

Container<KeyClass, ValueClass> x;

x::iterator_type i

或者我缺少的任何其他明显的捷径?

4

2 回答 2

3

auto这也是 C++11 引入关键字新含义的原因之一:

auto it = vec.begin();

编译器将以it类似于模板类型推导的方式从初始化程序中计算出类型。

在 C++11 之前,通常的方法是typedef按照您的建议使用 s 。它通常typedef对容器最有用,然后提供与之相关的所有内容:

typedef std::unordered_map<key, value> map;
map m;
map::iterator = m.begin();

你可以给你一个更有意义的名字来typedef准确描述map它的种类。例如,如果您有一个从姓名到电话号码的映射,您可以调用它phone_map,而迭代器将是phone_map::iterator.

auto也是完美转发的好工具

于 2013-02-07T11:54:02.407 回答
2

在 C++11 中,您可以使用decltype从变量中获取类型。

写:

std::unordered_map<keyclass, valueclass> m;
decltype(m)::iterator it = m.begin();

当然,如果你使用的是 C++1,那么你也可以只写:

std::unordered_map<keyclass, valueclass> m;
auto it = m.begin();
于 2013-02-07T11:55:36.310 回答