当前位置:  开发笔记 > 编程语言 > 正文

STL喜欢容器typedef快捷方式?

如何解决《STL喜欢容器typedef快捷方式?》经验,为你挑选了2个好方法。

STL容器的常见模式是:

map map;
for(map::iterator iter = map.begin(); iter != map.end(); ++iter)
{
  ...
}

因此,为了避免编写模板参数的声明,我们可以在某处执行此操作:

typedef map TNiceNameForAMap;

但是,如果此映射仅用于单个函数或单个迭代,则这是一个烦人的开销.

这种typedef有什么方法吗?



1> Steve Jessop..:

不确定你的意思是"开销".如果它简化了编写代码的方式,请使用它,否则坚持使用.

如果它仅在受限范围内使用,请将typedef放在同一范围内.然后,它不需要发布,记录或出现在任何UML图表上.例如(我并不认为这是其他方面的最佳代码):

int totalSize() {
    typedef std::map DeDuplicator;
    DeDuplicator everything;

    // Run around the universe finding everything. If we encounter a key
    // more than once it's only added once.

    // now compute the total
    int total = 0;
    for(DeDuplicator::iterator i = everything.begin(); i <= everything.end(); ++i) {
        total += i->second.size(); // yeah, yeah, overflow. Whatever.
    }
    return total;
}

结合Ferruccio的建议(如果你正在使用boost),循环变为:

BOOST_FOREACH(DeDuplicator::pair p, everything) {
    total += p.second.size();
}

并结合bk1e的建议(如果您正在使用C++ 0x或具有来自它的功能),并假设BOOST_FOREACH以我认为应该基于以下事实与auto交互:它通常可以处理对兼容类型的隐式转换:

std::map everything;
// snipped code to run around...
int total = 0;
BOOST_FOREACH(auto p, everything) {
    total += p.second.size();
}

不错.



2> Ferruccio..:

您可以使用Boost.Foreach

推荐阅读
mylvfamily
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有