我更改了一些代码来转换 std::set
到 boost::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/