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

An improved Version of std::iter_swap

Boost , Chapter 1. Boost.TypeTraits , Examples

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

Демонстрирует версию<std::iter_swap>, которая использует черты типа, чтобы определить, являются ли аргументы прокси-итераторами или нет, если они не являются, то это просто делает<std::swap>из него исключенных аргументов (то же, что и<std::iter_swap>), однако если они являются прокси-итераторами, то особое внимание уделяется свопу, чтобы гарантировать, что алгоритм работает правильно для обоих прокси-итераторов и даже итераторов разных типов (см.iter_swap_example.cpp).:

//
// iter_swap:
// tests whether iterator is a proxy iterator or not, and
// uses optimal form accordingly:
//
namespace detail{
template <typename I>
static void do_swap(I one, I two, const boost::false_type&)
{
   typedef typename std::iterator_traits<I>::value_type v_t;
   v_t v = *one;
   *one = *two;
   *two = v;
}
template <typename I>
static void do_swap(I one, I two, const boost::true_type&)
{
   using std::swap;
   swap(*one, *two);
}
}
template <typename I1, typename I2>
inline void iter_swap(I1 one, I2 two)
{
   //
   // See is both arguments are non-proxying iterators, 
   // and if both iterator the same type:
   //
   typedef typename std::iterator_traits<I1>::reference r1_t;
   typedef typename std::iterator_traits<I2>::reference r2_t;
   typedef boost::integral_constant<bool,
      ::boost::is_reference<r1_t>::value
      && ::boost::is_reference<r2_t>::value
      && ::boost::is_same<r1_t, r2_t>::value> truth_type;
   detail::do_swap(one, two, truth_type());
}

PrevUpHomeNext

Статья An improved Version of std::iter_swap раздела Chapter 1. Boost.TypeTraits Examples может быть полезна для разработчиков на c++ и boost.




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



:: Главная :: Examples ::


реклама


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

Время компиляции файла: 2024-08-30 11:47:00
2025-05-19 20:39:42/0.027998924255371/1