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

Динамический массив - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Вывести имена трех худших по баллу http://www.cyberforum.ru/cpp-beginners/thread161954.html
Вот условие На вход программе подаются сведения о сдаче экзаменов учениками 11-х классов некоторой средней школы. В первой строке сообщается количество учеников N, которое не меньше 10, но не превосходит 100, каждая из следующих N строк имеет следующий формат: <Фамилия> <Имя> <оценки>, где <Фамилия> – строка, состоящая не более чем из 20 символов, <Имя> – строка, состоящая не более...
C++ Как определить, что собеседник в данный момент печатает сообщение как в ICQ Думаю многие имеют скайп/асю. И там есть фишка если собеседник набирает сообщение про ето тебе пишет... Как ето реализовать?? http://www.cyberforum.ru/cpp-beginners/thread161948.html
C++ Ошибка в коде при выведении строки
Пишу код для покера. Вот одна из его частей: #include <iostream> #include <time.h> using namespace std; class Pack { string kind_of_prise; int money_prise;
Учебник по C++ полный. C++
Где взять такой учебник где все рассказывается о языке от а до я???
C++ Где взять консольный компилятор? http://www.cyberforum.ru/cpp-beginners/thread161917.html
Надоело мне эти IDE хочу попробывать по программировать в консольном компиляторе, вот только где его взять подскажите пожалуйста. Уже несколько дней ищу ни как немогу найти.
C++ Арифметика указателей есть size_t * pointer_1; logfile_f("\npointer_1 is 0x%X", pointer_1); есть size_t * pointer_2 = pointer_1 - 284; logfile_f("\npointer_2 is 0x%X", pointer_2); в итоге же: pointer_1 is 0x465B414 pointer_2 is 0x465AFA4 подробнее

Показать сообщение отдельно
fasked
Эксперт С++
4933 / 2513 / 180
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
28.08.2010, 03:06     Динамический массив
Цитата Сообщение от Juni85 Посмотреть сообщение
может Object Pascal хитрит, т.е. метод SetLength создает второй массив новой длины и копирует данные с первого и переписывает указатель?
Существует много методов перераспределения памяти. Зависит от конкретной реализации.
Как в паскале это принято делать не знаю, думаю, что алгоритмы везде одинаковые, но в том же векторе происходит примерно следующее.
Сначала резервируется некоторое количество памяти (этого может и не делаться) как бы про запас. Если нужно уменьшить размер вектора, то память скорее всего перераспределяться не будет, а просто изменится значение переменной хранящей размер. При увеличении размера захватывается опять большее количество памяти, чем необходимо конкретно в этот момент. Если нужно увеличить размер на большее количество байт, чем доступно в резерве, то происходит перераспределение памяти (по стандарту данные в векторе должны храниться последовательно, поэтому нельзя выделить новый кусок где попало). Вот в этом моменте, как раз таки и создается временный второй контейнер для хранения данных.

Таким образом удается избежать постоянного копирования во временный массив.

Всего этого может и не быть. Простейшие реализации могут копировать данные при каждом изменении размера.
Дополнительно можете почитать про функции вектора resize, reserve, capacity.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru