我更改了一些代码以将std::set
转换为boost::ptr_set
。但是,代码不能编译;问题是我假设ptr_set
插入的返回值与set
插入(pair<myIter, bool>
)相同。在Google上花了一个小时后,我找到this,结果发现ptr_set
插页的返回值似乎是一个布尔值。
是否有关于ptr容器和std容器之间差异的确切文档?我还没有在boost网站上找到任何东西,但也许我只是愚蠢......
好的 - 令我困惑的是这段代码
t.insert(s.release(s.begin()));
p = t.insert(s.release(s.begin()));
在gcc的第一行报告没有错误,但报告第二行上的operator=
没有匹配,所以我认为错误是在返回类型中。但是,如果注释掉第二行,则第一行将报告为错误(释放不返回迭代器)。我发布的链接使我的困惑更加复杂,ptr_container的作者声称“ptr_set&lt;&gt;中的insert()返回bool”。但是,通过阅读链接,很明显代码当时还没有完成。谢谢Kerrek。
答案 0 :(得分:3)
以下代码按预期工作,界面与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",或许这并不是很明显。