gpt4 book ai didi

c++ - 如何使用带有 boost::ptr_map 的 BOOST_FOREACH?

转载 作者:IT老高 更新时间:2023-10-28 23:09:46 25 4
gpt4 key购买 nike

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

Kristo 在他的 answer 中展示了可以将 BOOST_FOREACH 与 ptr_map 一起使用,但与使用迭代器迭代 ptr_map 相比,它并不能真正为我节省任何打字(或使我的代码更易读):

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

// vs.

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

下面的代码是我想要的。它遵循如何将 BOOST_FOREACH 与 std::map 一起使用的标准方法。不幸的是,这不能编译:

boost::ptr_map<int, T> mymap;
// insert something into mymap
// ...

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

最佳答案

作为 STL 风格的容器,指针容器有一个可以使用的 value_type typedef:

#include <boost/ptr_container/ptr_map.hpp>
#include <boost/foreach.hpp>

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

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

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

另外,你应该尽量避免在 boost 中使用 detail 命名空间的内容,这是一个 boost 约定,它们包含实现细节。

关于c++ - 如何使用带有 boost::ptr_map 的 BOOST_FOREACH?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/461507/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com