C++ std::set和boost::ptr_set之间的差异?
我更改了一些代码,将C++ std::set和boost::ptr_set之间的差异?,c++,boost,boost-ptr-container,C++,Boost,Boost Ptr Container,我更改了一些代码,将std::set转换为boost::ptr_set。但是,代码没有编译;问题是,我假设ptr\u集insert的返回值与setinsert(一个对)的返回值相同。在谷歌上搜索了一个小时后,我发现ptr_集的返回值似乎是bool ptr容器和std容器之间的差异是否有明确的文件?我在boost网站上没有找到任何东西,但也许我只是在装傻 编辑 好的-让我困惑的是这个代码 t.insert(s.release(s.begin())); p = t.insert(s.rele
std::set
转换为boost::ptr_set
。但是,代码没有编译;问题是,我假设ptr\u集
insert的返回值与set
insert(一个对
)的返回值相同。在谷歌上搜索了一个小时后,我发现ptr_集的返回值似乎是bool
ptr容器和std容器之间的差异是否有明确的文件?我在boost网站上没有找到任何东西,但也许我只是在装傻
编辑
好的-让我困惑的是这个代码
t.insert(s.release(s.begin()));
p = t.insert(s.release(s.begin()));
在gcc的第一行中没有报告错误,但在第二行中没有报告与operator=
匹配的错误,因此我认为错误在返回类型中。但是,如果您注释掉第二行,那么第一行将作为错误报告(发行版不返回迭代器)。我发布的链接使我的困惑更加复杂,其中ptr_容器的作者声明“ptr_集中的insert()返回bool”。然而,阅读下面的链接,很明显代码当时还没有完成。谢谢Kerrek。以下代码按预期工作,接口与std::set::insert()的相同。
:
#包括
#包括
#包括
int main()
{
boost::ptr_集s;
{
自动p=s.insert(新int(4));
std::cout缺少什么?如果您发布的链接中有关于set insert返回值的内容,那么我找不到它。或者在其他几页中。没有一个示例显示set insert的返回值。这对我来说似乎非常缺少。参考包含哪些概述insert
(从我的第一个链接点击两下就到了这里)。我同意@EML:文档真的很难使用。
#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"; }
}