РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
663 of 815 menu

Функция uninitialized_copy

Функция uninitialized_copy копирует элементы из исходного диапазона в область неинициализированной памяти. В первом параметре мы передаем итератор на начало исходного диапазона, во втором - итератор на конец исходного диапазона, а в третий - итератор на начало области неинициализированной памяти, куда следует скопировать элементы. В отличие от std::copy, эта функция не присваивает значения существующим объектам, а создает новые объекты с помощью конструктора копирования.

Синтаксис

uninitialized_copy(first, last, d_first)

Пример

Давайте скопируем элементы вектора в неинициализированную память, выделенную через operator new:

#include <iostream> #include <memory> #include <vector> using namespace std; int main() { vector<int> src = {1, 2, 3, 4, 5}; int* buf = static_cast<int*>( operator new(sizeof(int) * src.size()) ); uninitialized_copy(src.begin(), src.end(), buf); for (size_t i = 0; i < src.size(); i++) { cout << buf[i] << " "; } cout << endl; destroy_at(buf); operator delete(buf); return 0; }

Результат выполнения кода:

1 2 3 4 5

Пример

Давайте скопируем строки из одного вектора в неинициализированную память:

#include <iostream> #include <memory> #include <string> #include <vector> using namespace std; int main() { vector<string> src = {"a", "b", "c", "d", "e"}; string* buf = static_cast<string*>( operator new(sizeof(string) * src.size()) ); uninitialized_copy(src.begin(), src.end(), buf); for (size_t i = 0; i < src.size(); i++) { cout << buf[i] << " "; } cout << endl; for (size_t i = 0; i < src.size(); i++) { destroy_at(buf + i); } operator delete(buf); return 0; }

Результат выполнения кода:

"a b c d e"

Смотрите также

  • функция uninitialized_fill,
    которая заполняет неинициализированную память
  • функция construct_at,
    которая создает объект в заданной памяти
  • функция destroy_at,
    которая уничтожает объект по указателю
  • функция allocator,
    который управляет выделением памяти
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить