Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

что показывает std::vector::max_size - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Рекурсивно определить сумму отрицательных элементов http://www.cyberforum.ru/cpp-beginners/thread921856.html
Задача.С клавиатуры вводится последовательность целых чисел, признак конца ввода 0. Рекурсивно определить сумму отрицательных элементов. Очень нужно.Вот немного написал. #include <stdio.h>...
C++ Библиотека для работы с матрицами Пожалуйста, подскажите библиотеку, где можно находить определитель матрицы. И какой функцией если можно)) http://www.cyberforum.ru/cpp-beginners/thread921846.html
Обратная польская запись C++
Подскажите, как по обратной польской записи выражения построить дерево выражения Например: дана запись 1 2 + 3 4 * - выход: дерево
Считывание чисел, вычитание и запись в новый файл каждой строки C++
Есть файл, где все строки имеют такую структуру <object id="object (las2_lodbrigtower) (1)" interior="0" collisions="true" alpha="255" doublesided="true" model="5300" scale="1" dimension="0"...
C++ Указатель на метод класса (ошибка) http://www.cyberforum.ru/cpp-beginners/thread921818.html
помогите исправить код что бы разобраться в нем) взято с книги и не компилиться. выкидывает ошибку (code::blocks) : "ошибка: некорректный вызов элемента-функции «void A::Func()» без объекта "...
C++ бот для браузерной флеш-игры ребят, понадобилась помощь! никогда не работал из с++ с флешь и браузером. это для меня в новинку.может кто знает как написать бота для флешь игры? мне нужно чтобы с браузера вообще не заходить в... подробнее

Показать сообщение отдельно
Kuzia domovenok
1891 / 1746 / 118
Регистрация: 25.03.2012
Сообщений: 5,925
Записей в блоге: 1
12.07.2013, 01:59
Если последовательно делать push_back по одному элементу в вектор, последует серия расширений вектора.

То есть на каждом шаге цикла, будет происходить выделение нового блока памяти больше старого и поэлементное копирование данных из старого блока в новый

Не по теме:

(т.е. не совсем на каждом шаге, т.к. каждый новый пушбек выделяет память с некоторым запасом, но этот запас через несколько итераций будет кончаться и произойдёт новое тормознутое перевыделение.)


В таких случаях используй vector::reserve перед длительной серией пушбеков.
C++
1
2
3
4
5
6
7
8
    try{
      myvector.reserve(1E9);
      for (int i=0; i<1E9; i++) 
          myvector.push_back(i);
  }
  catch(std::bad_alloc){
      std::cerr<<"Error"<<std::endl;
  }
Ну и за одно, как видишь, ещё мы отлавливаем исключения, которые при этом возникают...
как и следовало ожидать, вываливается исключение о нехватке памяти

Добавлено через 45 секунд
Цитата Сообщение от soican Посмотреть сообщение
capacity покажет 2048, т.е. он сожрал лишних 1023х4=4092 байта
Не по теме:
Хватит это терпеть!
чего хватит терпеть? Ты вообще понимаешь как пушбек работает? http://alenacpp.blogspot.ru/2005/06/vector_30.htmlПрочитал?
Понял, что при очередном пушбеке под вектор выделяется памяти "с запасом", чтобы серия пушбеков не затормозила из-за постоянных копирований вектора в новую память?
1
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru