1

a を aに変換するように一部のコードを変更しstd::setましたboost::ptr_set。ただし、コードはコンパイルされません。問題は、挿入からの戻り値が挿入 (a )ptr_setと同じであると想定していることです。Google で 1 時間後、これを見つけまし。挿入からの戻り値がbool のように見えることがわかりました。setpair<myIter, bool>ptr_set

ptr コンテナーと std コンテナーの違いに関する決定的なドキュメントはありますか? ブースト Web サイトで何も見つかりませんでしたが、単に私が愚かなだけかもしれません...

編集

わかりました-私を混乱させたのは、このコード

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

gcc の 1 行目にはエラーが報告されていませんがoperator=、2 行目には一致が報告されていないため、エラーは戻り値の型にあると考えられました。ただし、2 行目をコメントアウトすると、1 行目がエラーとして報告されます (release はイテレータを返しません)。私の混乱は、私が投稿したリンクによってさらに悪化しました. ただし、リンクを読んでみると、その時点でコードが完成していなかったことが明らかになります。ありがとうケレック。

4

1 に答える 1

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」を探す必要がありますが、おそらくそれは完全には明らかではありません。

于 2012-01-26T22:56:36.033 に答える