c++ - std::set 和 boost::ptr_set 之间的区别?

标签 c++ boost boost-ptr-container

我更改了一些代码来转换 std::setboost::ptr_set .但是,代码无法编译;问题是我假设 ptr_set 的返回值插入与 set 相同插入(pair<myIter, bool>)。在 Google 上一个小时后,我找到了 this ,结果是 ptr_set 的返回值插入似乎是一个 bool 值。

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

编辑

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

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

在 gcc 的第一行报告没有错误,但报告不匹配 operator=在第二行,所以我认为错误在返回类型中。但是,如果您注释掉第二行,则第一行会被报告为错误(release 不返回迭代器)。我发布的链接使我更加困惑,其中 ptr_container 的作者声明“insert() in ptr_set<> 返回 bool”。但是,继续阅读链接会发现代码当时还没有完成。谢谢 Kerrek。

最佳答案

以下代码按预期工作,接口(interface)与 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"; }
}

文档可能不是最容易浏览的,但它就在那里。你应该寻找 "set adapter" ,不过,也许这并不完全显而易见。

关于c++ - std::set 和 boost::ptr_set 之间的区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9026340/

相关文章:

c++ - 适用于 C 或 C++ 的 Google Drive API

c++ - 为什么这个 boost::variant::operator= 不调用编译?

c++ - 如何在显示其中一个属性的情况下在 graphviz 中打印 boost 图?

c++ - 当 ptr_vector 迭代器失效时

c++ - 从源代码编译后未安装 boost ptr_container 库

c++ - 使用 WinApi 在 C++ 中仅显示 2 个监视器的多监视器屏幕截图

c++ - constexpr std::initializer_list 的编译时验证

c++ - 我是否需要做一些特别的事情来让我的 C++ 程序使用 gcc 进行编译?

c++ - 如何制作可重入的Boost协程?

C++ 帮助 boost::ptr_map/boost::checked_delete 失败