1

我更改了一些代码以将 a 转换std::setboost::ptr_set. 但是,代码无法编译;问题是我假设插入的返回值与ptr_set插入set(a pair<myIter, bool>)相同。在谷歌上一个小时后我发现了这个,结果发现ptr_set插入的返回值似乎是一个布尔值。

是否有关于 ptr 容器和 std 容器之间差异的明确文档?我在boost网站上没有找到任何东西,但也许我只是愚蠢......

编辑

好的 - 让我感到困惑的是这段代码

  t.insert(s.release(s.begin()));
  p = t.insert(s.release(s.begin()));

在 gcc 的第一行报告没有错误,但operator=在第二行报告没有匹配,所以我认为错误在返回类型中。但是,如果您注释掉第二行,则第一行将报告为错误(发布不返回迭代器)。我发布的链接加剧了我的困惑,其中 ptr_container 的作者指出“ptr_set<> 中的插入()返回布尔值”。但是,继续阅读链接,很明显当时代码还没有完成。谢谢克雷克。

4

1 回答 1

3

以下代码按预期工作,接口与 for 相同std::set::insert()

#include <boost/ptr_container/ptr_set.hpp>
#include <boost/assign/ptr_list_inserter.hpp>
#include <iostream>

int main()
{
  boost::ptr_set<int> s;

  {
    auto p = s.insert(new int(4));
    std::cout << "Element " << *p.first << (p.second ? " inserted" : " already existed") << std::endl;
  }
  {
    auto p = s.insert(new int(4));
    std::cout << "Element " << *p.first << (p.second ? " inserted" : " already existed") << std::endl;
  }

  boost::assign::ptr_insert(s)(1)(2)(3)(4);

  for (auto it = s.begin(), end = s.end(); it != end; ++it) { std::cout << *it << "\n"; }
}

文档可能不是最容易浏览的,但它就在那里。不过,您应该寻找“设置适配器”,这可能并不完全明显。

于 2012-01-26T22:56:36.033 回答