std::vector::reserve
Материал из cppreference.com
![]() |
Эта страница была переведена автоматически с английской версии вики используя Переводчик Google. Перевод может содержать ошибки и странные формулировки. Наведите курсор на текст, чтобы увидеть оригинал. Щёлкните здесь, чтобы увидеть английскую версию этой страницы. (Вы можете помочь в исправлении ошибок и улучшении перевода. Для инструкций перейдите по ссылке.) |
void reserve( size_type new_cap ); |
||
Увеличьте емкость вектора до значения, которое больше или равно
new_cap
. Если new_cap
больше, чем текущая std::vector::capacity() , выделяется новое хранилище, в противном случае функция ничего не делает. Новая память выделяется при необходимости. Оригинал:
{{{2}}}
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
Содержание |
[править] Параметры
new_cap | — | резервирование памяти для вектора
Оригинал: new capacity of the container Текст был переведён автоматически используя Переводчик Google. Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда. |
[править] Возвращаемое значение
(Нет)
[править] Исключения
- std::length_error if new_cap > max_size().
[править] Сложность
линейные по размеру контейнера
Оригинал:
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 функция-элемент) |