Различия между std::set и boost::ptr_set?

Я изменил код для преобразования std::set к boost::ptr_set, Однако код не компилируется; проблема в том, что я предполагаю, что возвращаемое значение из ptr_set Вставка такая же, как set вставить (pair<myIter, bool>). Через час в Google я нашел это, и оказалось, что возвращаемое значение из ptr_set вставка выглядит как бул.

Есть ли какая-либо определенная документация по различиям между контейнерами ptr и контейнерами std? На сайте буста я ничего не нашел, но, может быть, я просто тупой...

РЕДАКТИРОВАТЬ

Хорошо, что меня смутило то, что этот код

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

сообщает об отсутствии ошибки в первой строке на gcc, но сообщает о том, что нет совпадений для operator= на второй строке, так что я думал, что ошибка была в типе возврата. Однако, если вы закомментируете вторую строку, то первая строка затем сообщается как ошибка (релиз не возвращает итератор). Моя путаница усугублялась размещенной мною ссылкой, в которой автор ptr_container заявляет, что "insert () в ptr_set<> возвращает bool". Однако, читая по ссылке, становится очевидным, что код не был закончен в то время. Спасибо, Керрек.

1 ответ

Решение

Следующий код работает, как и ожидалось, и интерфейс такой же, как для 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"; }
}

Документация, возможно, не самая простая для навигации, но она есть. Вы должны искать "установить адаптер", хотя, возможно, это не совсем очевидно.

Другие вопросы по тегам