Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
Разработка программного обеспечения

Move inserters

Boost , The Boost C++ Libraries BoostBook Documentation Subset , Chapter 23. Boost.Move

Boost C++ Libraries

...one of the most highly regarded and expertly designed C++ library projects in the world. Herb Sutter and Andrei Alexandrescu, C++ Coding Standards

PrevUpHomeNext

Подобно стандартным итераторам вставки, можно иметь дело с вставкой перемещения таким же образом, как запись в массив. Специальный вид адаптеров итераторов, называемых итераторами вставки движения, снабжен этой библиотекой. с регулярными классами итераторов,

while (first != last) *result++ = *first++;

Это приводит к тому, что диапазон [первый, последний] копируется в диапазон, начинающийся с результата. Тот же код с результатом, являющимся ходом вставки итератора, будет перемещать вставку соответствующих элементов в контейнер. Это устройство позволяет всем алгоритмам копирования в библиотеке работать в режиме вставки движения вместо обычного режима перезаписи. Эта библиотека предлагает 3 итератора вставки и их вспомогательные функции:

// Note: C models Container
template <typename C>
class back_move_insert_iterator;
template <typename C>
back_move_insert_iterator<C> back_move_inserter(C& x);
template <typename C>
class front_move_insert_iterator;
template <typename C>
front_move_insert_iterator<C> front_move_inserter(C& x);
template <typename C>
class move_insert_iterator;
template <typename C>
move_insert_iterator<C> move_inserter(C& x, typename C::iterator it);

Итератор вставки хода построен из контейнера и, возможно, один из его итераторов указывает, где происходит вставка, если она не находится ни в начале, ни в конце контейнера. Включить итераторы, удовлетворяющие требованиям выходных итераторов.<operator*>возвращает ход вставки самого итератора. Назначение<operator=(T&x)>определено на итераторах вставки, чтобы разрешить запись в них, оно вставляет x непосредственно перед тем, куда указывает итератор вставки. Другими словами,<insertiterator>похож на курсор, указывающий в контейнер, где происходит вставка.<back_move_iterator>перемещать вставки элементов в конце контейнера,<front_insert_iterator>перемещать вставки элементов в начале контейнера и<move_insert_iterator>перемещать вставки элементов, где итератор указывает на контейнер.<back_move_inserter>,<front_move_inserter>и<move_inserter>являются тремя функциями, делающими итераторы вставки из контейнера. Вот пример того, как их использовать:

#include <boost/container/list.hpp>
#include "movable.hpp"
#include <cassert>
#include <algorithm>
using namespace ::boost::container;
typedef list<movable> list_t;
typedef list_t::iterator l_iterator;
template<class MoveInsertIterator>
void test_move_inserter(list_t &l2, MoveInsertIterator mit)
{
   //Create a list with 10 default constructed objects
   list<movable> l(10);
   assert(!l.begin()->moved());
   l2.clear();
   //Move insert into l2 containers
   std::copy(l.begin(), l.end(), mit);
   //Check size and status
   assert(l2.size() == l.size());
   assert(l.begin()->moved());
   assert(!l2.begin()->moved());
}
int main()
{
   list_t l2;
   test_move_inserter(l2, boost::back_move_inserter(l2));
   test_move_inserter(l2, boost::front_move_inserter(l2));
   test_move_inserter(l2, boost::move_inserter(l2, l2.end()));
   return 0;
}


PrevUpHomeNext

Статья Move inserters раздела The Boost C++ Libraries BoostBook Documentation Subset Chapter 23. Boost.Move может быть полезна для разработчиков на c++ и boost.




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.



:: Главная :: Chapter 23. Boost.Move ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-08-30 11:47:00
2025-05-19 17:50:41/0.0086090564727783/1