Как увеличить размер вектора c
Перейти к содержимому

Как увеличить размер вектора c

  • автор:

Изменение размера вектора

Слышал, что если делать в вектор push_back , то если у него не хватает внутреннего буфера, то он увеличивается в 1.5 раза. Правда ли? Будет ли тоже самое происходить когда я буду делать последовательно resize :

for(int i=0; i

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

#include #include #include using namespace std; int main() < const int N = 10000000; clock_t tStart; vectora; tStart = clock(); for(int i=0; i  

Пример вывода на ideone:

Time taken: 0.0649 sec Time taken: 0.0692 sec 

Отслеживать
задан 18 мая 2017 в 14:49
2,558 1 1 золотой знак 16 16 серебряных знаков 32 32 бронзовых знака

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

18 мая 2017 в 18:21

При resize реализация скорее всего вмешиваться не будет и будет выделять ровно столько, сколько попросили. resize и reserve в цикле является пессимизацией и ошибкой.

18 мая 2017 в 18:24

1 ответ 1

Сортировка: Сброс на вариант по умолчанию

Лучше для добавления элементов брать не vector, а list или unordered_set. Вектор хорошо удаляет и добавляет элементы только в конец. В остальных случаях на сколько-то больших данных вектор начинает двигать элементы и это может плохо сказаться на производительности. Можно конечно не передвигать при удалении, но тогда нарушается порядок элементов.

Вектор может выигрывать на малых тестах, но это пока в кэш данные влезут. Если вектор 10-100 малых элементов, то он быстрее будет, а может и нет, это от очень многих факторов зависит.

Вобщем есть дофига вариаций, когда что быстрее.

Можно запустить вот это и узнать что происходит с вектором.

for(int i=0; i

В одной онлайн IDE

b.resize(i+1); b[i] = i; 

Два раза присваивается значение сначала 0 потом цифра наверное поэтому дольше.

vector::size в C++ (с примерами)

Привет! Сегодня мы погрузимся в удивительный мир C++ и рассмотрим удобную функцию контейнера std::vector — функцию size . Начнем с краткого обзора и продемонстрируем её использование на простых примерах.

Получение количества элементов в векторе в C++

Если представить std::vector как коробку, в которой вы можете хранить и организовывать свои данные, то функция size просто сообщает вам, сколько элементов находится в этой коробке.

Вот базовая сигнатура функции size :

size_type size() const;
  • Она ничего не принимает.
  • Возвращает размер вектора в виде числа. Это число имеет тип size_type , что является разновидностью беззнакового числа.

Представьте, что у вас есть коробка ( std::vector ), и вы хотите узнать, насколько она заполнена. Вот как это сделать:

#include #include int main()  std::vectorint> my_numbers; std::cout  <"В коробке: "  .size()  <" элементов."  ::endl; return 0; >

При запуске вы получите:

В коробке: 0 элементов.

Почему ноль? Потому что мы только что создали коробку и ничего в неё не положили!

Заполним нашу коробку:

Векторы в C++ динамичны. Вы можете добавлять и удалять элементы. При внесении этих изменений функция size помогает отслеживать количество элементов.

Вот короткий пример:

#include #include int main()  std::vectorint> my_numbers; for (int i = 0; i  10; i++)  my_numbers.push_back(i); // Добавляем элементы в коробку. > std::cout  <"Теперь в коробке: "  .size()  <" элементов."  ::endl; return 0; >
Теперь в коробке: 10 элементов.

Когда это полезно?

Представьте, что вы работаете над игрой и у вас есть список (vector) игроков. Иногда игроки присоединяются, иногда уходят. Используя функцию size , вы всегда будете знать, сколько у вас сейчас игроков. Это может быть полезно для разделения игроков на команды, проверки наличия достаточного количества игроков для начала игры и многого другого.

Что следует помнить:

  1. Размер и емкость: size показывает, сколько элементов в векторе. Но у векторов есть также такое понятие как capacity , которое показывает, сколько он может вместить, прежде чем потребуется увеличение. Они не всегда совпадают!
  2. Быстро и надежно: Получение размера вектора выполняется очень быстро, независимо от количества элементов в нем. И это всегда безопасно — это не изменит вектор или элементы внутри.
  3. Исключений нет! Лучшая часть заключается в том, что эта функция не выдает ошибок или исключений. Это как задать вопрос и быть уверенным, что вы всегда получите ответ.

Некоторые интересные связанные функции:

  • vector::capacity: Как уже упоминалось, это показывает, сколько ваш вектор может вместить, прежде чем потребуется расширение.
  • vector::resize: Если вы хотите изменить размер вашего вектора (увеличить или уменьшить его), эта функция может вам помочь.
  • vector::max_size: Хотите узнать максимальное количество элементов, которое может содержать ваш вектор? Используйте функцию max_size !

В заключение, понимание особенностей контейнера std::vector и его функций, таких как size , поможет вам в написании C++ программ. Независимо от того, только ли вы начали изучение или оттачиваете свои навыки, динамичный и универсальный характер векторов обязательно станет незаменимым инструментом в вашем программистском арсенале.

  1. Понимание функции size :
    • Создайте std::vector типа string для хранения имен.
    • Добавьте в этот вектор пять имен.
    • Выведите на экран текущий размер вектора с помощью функции size .
    • Удалите из вектора два имени.
    • Снова выведите на экран текущий размер вектора.
  2. Сравнение size и capacity :
    • Используя тот же std::vector имен из предыдущего задания, выведите на экран емкость вектора.
    • Добавьте еще 10 имен в вектор.
    • Выведите размер и емкость вектора после этих добавлений.
    • Обсудите разницу между размером и емкостью на основе полученных результатов.
  3. Изучение других функций вектора:
    • Используйте функцию resize , чтобы увеличить размер вашего вектора до 20 и инициализировать новые элементы именем “Вася Пупкин”.
    • Выведите все элементы вектора.
    • Используйте функцию max_size , чтобы вывести максимальное количество элементов, которое вектор может хранить.
    • Подумайте о том, как функции resize и max_size могут быть полезны в разных ситуациях.

Читайте также

string::size в C++

C++ предлагает разнообразные инструменты для работы со строками, и одна из самых важных функций — это string::size. В этой статье мы подробно рассмотрим эту функцию, поймем, как она измеряет строки, и исс

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *