Namespaces
Variants

std::list<T,Allocator>:: resize

From cppreference.net

void resize ( size_type count ) ;
(1) (constexpr начиная с C++26)
void resize ( size_type count, const value_type & value ) ;
(2) (constexpr начиная с C++26)

Изменяет размер контейнера для хранения count элементов:

  • Если count равно текущему размеру, ничего не делает.
  • Если текущий размер больше count , контейнер сокращается до первых count элементов.
  • Если текущий размер меньше count , тогда:
1) Дополнительные копии T ( ) (до C++11) элементы, вставленные по умолчанию (начиная с C++11) добавляются.
2) Дополнительные копии value добавляются в конец.

Содержание

Параметры

count - новый размер контейнера
value - значение для инициализации новых элементов
Требования к типам
-

Если выполняется следующее условие, поведение не определено:

1) T не является DefaultInsertable в list .
2) T не является CopyInsertable в list .
(since C++11)

Сложность

Линейно по разнице между текущим размером и count .

Примечания

Если инициализация значением в перегрузке ( 1 ) нежелательна, например, если элементы имеют неклассовый тип и обнуление не требуется, этого можно избежать, предоставив пользовательский Allocator::construct .

Пример

#include <list>
#include <iostream>
void print(auto rem, const std::list<int>& c)
{
    for (std::cout << rem; const int el : c)
        std::cout << el << ' ';
    std::cout << '\n';
}
int main()
{
    std::list<int> c = {1, 2, 3};
    print("The list holds: ", c);
    c.resize(5);
    print("After resize up to 5: ", c);
    c.resize(2);
    print("After resize down to 2: ", c);
    c.resize(6, 4);
    print("After resize up to 6 (initializer = 4): ", c);
}

Вывод:

The list holds: 1 2 3
After resize up to 5: 1 2 3 0 0
After resize down to 2: 1 2
After resize up to 6 (initializer = 4): 1 2 4 4 4 4

Отчёты о дефектах

Следующие отчеты об изменениях в поведении, содержащие описания дефектов, были применены ретроактивно к ранее опубликованным стандартам C++.

DR Applied to Behavior as published Correct behavior
LWG 132 C++98 для определения диапазона удаления использовались итераторы произвольного доступа использовать двунаправленные итераторы
LWG 679 C++98 resize() передавал value по значению передаёт по константной ссылке
LWG 1420 C++98 поведение resize ( size ( ) ) не было определено определено

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

возвращает максимально возможное количество элементов
(public member function)
возвращает количество элементов
(public member function)
проверяет, является ли контейнер пустым
(public member function)