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

如何将BOOST_FOREACH与boost :: ptr_map一起使用?

如何解决《如何将BOOST_FOREACH与boost::ptr_map一起使用?》经验,为你挑选了3个好方法。

如何使用boost :: ptr_map有效地使用BOOST_FOREACH(字符数/可读性)?

Kristo在他的回答中证明了可以将BOOST_FOREACH与ptr_map一起使用,但它并没有真正省去任何输入(或使我的代码真的更具可读性),而不是使用迭代器迭代ptr_map:

typedef boost::ptr_container_detail::ref_pair IntPair;
BOOST_FOREACH(IntPair p, mymap) {
    int i = p.first;
}

// vs.

boost::ptr_map::iterator it;
for (it = mymap.begin(); it != mymap.end(); ++it) {
    // doSomething()
}

下面的代码就像我希望的那样.它遵循如何将BOOST_FOREACH与std :: map一起使用的标准方法.不幸的是,这不编译:

boost::ptr_map mymap;
// insert something into mymap
// ...

typedef pair IntTpair;
BOOST_FOREACH (IntTpair &p, mymap) {
    int i = p.first;
}

Daniel James.. 16

作为STL样式容器,指针容器具有value_type可以使用的typedef:

#include 
#include 

int main()
{
    typedef boost::ptr_map int_map;
    int_map mymap;

    BOOST_FOREACH(int_map::value_type p, mymap)
    {
    }
}

我发现对容器使用typedef会使代码更容易编写.

此外,您应该尽量避免detail在boost中使用命名空间的内容,这是一个包含实现细节的提升约定.



1> Daniel James..:

作为STL样式容器,指针容器具有value_type可以使用的typedef:

#include 
#include 

int main()
{
    typedef boost::ptr_map int_map;
    int_map mymap;

    BOOST_FOREACH(int_map::value_type p, mymap)
    {
    }
}

我发现对容器使用typedef会使代码更容易编写.

此外,您应该尽量避免detail在boost中使用命名空间的内容,这是一个包含实现细节的提升约定.



2> Emile Cormie..:

我今天遇到了同样的问题.不幸的是,丹尼尔的建议不适用于对地图的不断引用.在我的例子中,ptr_map是一个类的成员,我想在const成员函数中循环它.借用丹尼尔的例子,这就是我在我的案例中必须做的事情:

#include "boost/ptr_container/ptr_map.hpp"
#include "boost/foreach.hpp"

int main()
{
    typedef boost::ptr_map int_map;
    int_map mymap;
    const int_map& mymap_const_ref(mymap);

    BOOST_FOREACH(int_map::const_iterator::value_type p, mymap_const_ref)
    {
    }
}

这似乎int_map::const_iterator::value_type相当于boost::ptr_container_detail::ref_pair.



3> Paul Fultz I..:

使用元组保存自己的输入并提高可读性:

boost::ptr_map mymap;
int key;
T * value;
BOOST_FOREACH(boost::tie(key, value), mymap)
{
    ...
}

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