2012-05-10 3 views
3

Я изучал stl в течение последних двух недель и имел дело с большим количеством vector<T>, deque<T> и list<T>. Все эти времена я использовал push_back(), push_front(), insert(). В настоящее время, хотя, я был введен в «Вставка итераторы» которых являются следующие:Вставьте итераторы против вставки функции члена контейнера

  • back_insert_iterator, который похож на push_back() и делает требует контейнер, чтобы иметь push_back() функцию для работы
  • front_insert_iterator, который похож на push_front() и требует контейнер, чтобы иметь push_front()
  • insert_iterator, подобный insert() и бла

Так что я знаю, как реализовать все это. Мой вопрос довольно прост, в чем разница? Зачем использовать вставные итераторы ?

ответ

9

Потому что вы можете передать их алгоритмам, например.

std::copy(v1.begin(), v1.end(), std::back_inserter(v2)); 
+0

достаточно просто, учитель должен был просто сказать это явно и вместо того, чтобы быть старым неявным меркуриальным laskasjflasjdf. –

+2

Всегда лучше понять, да :) Суть в том, что 'back_insert_iterator' является« просто »выходным итератором, который вызывает« push_back »в своем операторе присваивания (например, см. Http://www.cplusplus.com/reference/станд/итератор/back_insert_iterator /). Если вам интересно, я, кажется, помню книгу Джосуттиса «Стандартная библиотека C++», в которой содержится более подробное объяснение всего этого. –

+1

Я куплю эту книгу в своей следующей зарплате :) –

Смежные вопросы