Шаг 561.
Библиотека STL. Распределители памяти. Требования к распределителям памяти. Операции с неинициализированной памятью

    На этом шаге мы рассмотрим функции, которые можно использовать для работы с неинициализированной памятью.

    На этом шаге подробно описаны вспомогательные функции для работы с неинициализированной памятью.

 void uninitialized_fill (ForwardIterator beg, 
                       ForwardIterator end, const T& value)
Инициализирует элементы интервала [beg,end) значением value. Функция либо выполняется успешно, либо не вносит изменений. Типичная реализация uninitialized_fill():
namespace std {
	    template <class ForwIter, class T>
	    void uninitialized_fill(ForwIter beg, ForwIter end,
	                            const T& value)
	    {
	        typedef typename iterator_traits<ForwIter>::value_type VT;
	        ForwIter save(beg);
	        try {
	            for (; beg!=end; ++beg) {
	                new (static_cast<void*>(&*beg))VT(value);
	            }
	        }
	        catch (...) {
	            for (; save!=beg; ++save) {
	                save->~VT();
	            }
	            throw;
	        }
	    }
	}
void uninitialized_fill_n (ForwardIterator beg, Size num,
                         const T& value)
Инициализирует num элементов, начиная с beg, значением value. Функция либо выполняется успешно, либо не вносит изменений. Типичная реализация uninitialized_fill_n():
namespace std {
	    template <class ForwIter, class Size, class T>
	    void uninitialized_fill_n (ForwIter beg, Size num,
	                            const T& value)
	    {
	        typedef typename iterator_traits<ForwIter>::value_type VT;
	        ForwIter save(beg);
	        try {
	            for (; num--; ++beg) {
	                new (static_cast<void*>(&*beg))VT(value);
	            }
	        }
	        catch (...) {
	            for (; save!=beg; ++save) {
	                save->~VT();
	            }
	            throw;
	        }
	    }
	}
Пример использования функции uninitialized_fill_n() приведен на 554 шаге.
void uninitialized_copy (InputIterator sourceBeg, InputIterator sourceEnd,
               ForwardIterator destBeg)
Элементами из интервала [sourceBeg,sourceEnd) инициализирует память, начиная с destBeg. Функция либо выполняется успешно, либо не вносит изменений. Пример использования функции uninitialized_copy() приведен на 554 шаге.

    Мы закончили изучение возможностей библиотеки STL. Надеемся, что изложенный материал будет Вам полезен.




Предыдущий шаг Содержание