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

Move iterators

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
template<class Iterator>
class move_iterator;
template<class It>
move_iterator<It> make_move_iterator(const It &it);

<move_iterator>является адаптером итератора с тем же поведением, что и базовый итератор, за исключением того, что его оператор отсчета неявно преобразует значение, возвращаемое оператором отсчета отсчета от базового итератора, в ссылку на значение r:<boost::move(*underlying_iterator)>Это итератор считывания, но он может иметь характеристики случайного доступа.

<move_iterator>Это очень полезно, потому что некоторые общие алгоритмы и функции вставки контейнеров могут быть вызваны итераторами перемещения, чтобы заменить копирование движением. Например:

//header file "movable.hpp"
#include <boost/move/core.hpp>
#include <boost/move/traits.hpp>
//A movable class
class movable
{
   BOOST_MOVABLE_BUT_NOT_COPYABLE(movable)
   int value_;
   public:
   movable() : value_(1){}
   //Move constructor and assignment
   movable(BOOST_RV_REF(movable) m)
   {  value_ = m.value_;   m.value_ = 0;  }
   movable & operator=(BOOST_RV_REF(movable) m)
   {  value_ = m.value_;   m.value_ = 0;  return *this;  }
   bool moved() const //Observer
   {  return !value_; }
   int value() const //Observer
   {  return value_; }
};
namespace boost{
template<>
struct has_nothrow_move<movable>
{
   static const bool value = true;
};
}  //namespace boost{

<movable>Объекты могут перемещаться из одного контейнера в другой с помощью итераторов перемещения и операций вставки и назначения. в

#include <boost/container/vector.hpp>
#include "movable.hpp"
#include <cassert>
int main()
{
   using namespace ::boost::container;
   //Create a vector with 10 default constructed objects
   vector<movable> v(10);
   assert(!v[0].moved());
   //Move construct all elements in v into v2
   vector<movable> v2( boost::make_move_iterator(v.begin())
                     , boost::make_move_iterator(v.end()));
   assert(v[0].moved());
   assert(!v2[0].moved());
   //Now move assign all elements from in v2 back into v
   v.assign( boost::make_move_iterator(v2.begin())
           , boost::make_move_iterator(v2.end()));
   assert(v2[0].moved());
   assert(!v[0].moved());
   return 0;
}


PrevUpHomeNext

Статья Move iterators раздела 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:28:59/0.0080552101135254/1