Пространства имён
Варианты
Действия

std::vector::reserve

Материал из cppreference.com
< cpp‎ | container‎ | vector

 
 
 
 
void reserve( size_type new_cap );
Увеличьте емкость вектора до значения, которое больше или равно new_cap. Если new_cap больше, чем текущая std::vector::capacity() , выделяется новое хранилище, в противном случае функция ничего не делает. Новая память выделяется при необходимости.
Оригинал:
{{{2}}}
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.

Содержание

[править] Параметры

new_cap
резервирование памяти для вектора
Оригинал:
new capacity of the container
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.

[править] Возвращаемое значение

(Нет)

[править] Исключения


[править] Сложность

линейные по размеру контейнера
Оригинал:
linear in the size of the container
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.

[править] Пример

#include <cstddef>
#include <iostream>
#include <new>
#include <vector>
 
// минимальный распределитель с выводом отладки С++11
template <class Tp>
struct NAlloc {
    typedef Tp value_type;
    NAlloc() = default;
    template <class T> NAlloc(const NAlloc<T>&) {}
 
    Tp* allocate(std::size_t n)
    {
        n *= sizeof(Tp);
        Tp* p = static_cast<Tp*>(::operator new(n));
        std::cout << "распределение " << n << " bytes @ " << p << '\n';
        return p;
    }
 
    void deallocate(Tp* p, std::size_t n)
    {
        std::cout << "освобождение " << n*sizeof*p << " bytes @ " << p << "\n\n";
        ::operator delete(p);
    }
};
template <class T, class U>
bool operator==(const NAlloc<T>&, const NAlloc<U>&) { return true; }
template <class T, class U>
bool operator!=(const NAlloc<T>&, const NAlloc<U>&) { return false; }
 
int main()
{
    constexpr int max_elements = 32;
 
    std::cout << "использует резерв: \n";
    {
        std::vector<int, NAlloc<int>> v1;
        v1.reserve( max_elements ); // Резервирует как минимум * sizeof(int) bytes
 
        for(int n = 0; n < max_elements; ++n)
            v1.push_back(n);
    }
 
    std::cout << "не использует резерв: \n";
    {
        std::vector<int, NAlloc<int>> v1;
 
        for(int n = 0; n < max_elements; ++n) {
            if(v1.size() == v1.capacity()) {
                std::cout << "size() == capacity() == " << v1.size() << '\n';
            }
            v1.push_back(n);
        }
    }
}

Возможный вывод:

с использованием резерва: 
распределение 128 bytes @ 0xa6f840
освобождение 128 bytes @ 0xa6f840
 
без использования резерва: 
size() == capacity() == 0
распределение 4 bytes @ 0xa6f840
 
size() == capacity() == 1
распределение 8 bytes @ 0xa6f860
освобождение 4 bytes @ 0xa6f840
 
size() == capacity() == 2
распределение 16 bytes @ 0xa6f840
освобождение 8 bytes @ 0xa6f860
 
size() == capacity() == 4
распределение 32 bytes @ 0xa6f880
освобождение 16 bytes @ 0xa6f840
 
size() == capacity() == 8
распределение 64 bytes @ 0xa6f8b0
освобождение 32 bytes @ 0xa6f880
 
size() == capacity() == 16
распределение 128 bytes @ 0xa6f900
освобождение 64 bytes @ 0xa6f8b0
 
освобождение 128 bytes @ 0xa6f900

[править] См. также

возвращает количество элементов, которые могут храниться в выделенной в данный момент памяти
(public функция-элемент) [править]