С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.85/34: Рейтинг темы: голосов - 34, средняя оценка - 4.85
1 / 1 / 0
Регистрация: 23.03.2014
Сообщений: 79
1

Реализация vector

18.05.2015, 23:09. Показов 6107. Ответов 4
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Скажите, можно ли где-то посмотреть как примерно реализуются контейнерные классы STL или аналогичных шаблонных библиотек?

Меня, в частности, интересует шаблонный класс vector. Не укладывается в голове как могут быть созданы объекты типа вектор векторов. Ведь если vector - это массив, то каким образом он может содержать элементы разного размера, причем размер каждого элемента может динамически изменяться.
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
18.05.2015, 23:09
Ответы с готовыми решениями:

Реализация класса Vector
Добрый день всем! Пишу реализацию класса vector, но не могу разобраться, как написать ручные...

Примерная реализация std vector bool
добрый вечер, не могу найти в сети реализацию st::vector<bool> - есть у кого под рукой?)...

Реализация контейнера идентичного std::vector по Страуструпу
При попытке скомпилировать код появляются ошибки, хотя делаю вроде как пишет Бьярне. Компилятор VSE...

Нужна реализация функции std::vector::insert()
Нужна реализация функции std::vector::insert() 1)iterator insert (iterator position, const...

4
2549 / 1208 / 358
Регистрация: 30.11.2013
Сообщений: 3,826
18.05.2015, 23:16 2
так же как в СИ был двухмерный массив, размер элементов которых могу измениться
0
1 / 1 / 0
Регистрация: 23.03.2014
Сообщений: 79
18.05.2015, 23:28  [ТС] 3
Т.е. объект vector содержит указатель на массив указателей в heap?
0
Форумчанин
Эксперт CЭксперт С++
8216 / 5046 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
18.05.2015, 23:44 4
Лучший ответ Сообщение было отмечено schdub как решение

Решение

Цитата Сообщение от Harb Посмотреть сообщение
можно ли где-то посмотреть как примерно реализуются контейнерные классы STL
В хедерах своего компилятора.

http://research.microsoft.com/... ource.html

Добавлено через 2 минуты
Списки, стеки, очереди
1
265 / 165 / 56
Регистрация: 25.02.2015
Сообщений: 435
18.05.2015, 23:57 5
в векторе содержатся объекты одного размера, но их количество меняется по ходу заполнения вектора.
допустим вектор для объектов типа int, которые в памяти занимают 8 байт. в этом случае внутри вектора
динамически выделяется массив, в который можно было бы уместить скажем 16 таких объектов. т.е. размер массива в байтах: 8*16. внутри вектора есть счетчики, сколько объектов в текущий массив может быть помещено и сколько реально помещено. при очередной операции вставки в вектор код проверяет, а влезет ли новый объект в этот массив. если да, то в нужной мозиции массива инициализируется этот объект. если не влазиет, то внутри вектора создается новый динамический массив который больше предыдущего скажем раза в два. из старого массива в новый копируются все объекты, которые в нем были + в конец втыкается новый объект, из-за которого это перераспределение было затеяно. старый массив удаляется. далее все повторяется. втыкаются новые объекты до тех пор, пока массива хватает. как только перестает хватать - все по новом. создается новый массив еще большего размера ...

Добавлено через 7 минут
по поводу вектора векторов:
статический размер вектора всегда одинаковый и известен во время компиляции. если вектор сделан как я описал выше, то его размер будет складываться из размера его членов данных:
C++
1
2
3
4
5
6
class Vector
{
   Type* pointerToDynamycArray; // указатель на динамический массив
   unsigned arrayCapacity;           // емкость массива
   unsigned objectsCount;            // количество объектов типа Type в массиве
};
sizeof(Vector) >= sizeof(Type*) + sizeof(unsigned) + sizeof(unsigned);
в случае, когда Type - это какой-то вектор, ничего не меняется, т.к. размер указателя на что-то всегда одинаковый и известен во время компиляции.
0
18.05.2015, 23:57
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
18.05.2015, 23:57
Помогаю со студенческими работами здесь

Четырехмерный массив (реализация через библиотеку vector)
Всем привет. Пытаюсь реализовать умножение четырехмерной матрицы. Пока застряла с выделением памяти...

Реализация своего std::vector c аллокатором памяти
Приветствую всех. Пытаюсь реализовать свой std::vector с аллокатором памяти и всеми конструкторами...

error LNK2019: ссылка на неразрешенный внешний символ "public: __thiscall Vector<int>::Vector<int>(void)" (?0?$Vector@H@@QAE@XZ) в функции _main
//Vector.h #include &lt;iostream&gt; #include &lt;Windows.h&gt; #include &lt;climits&gt; #include &lt;vector&gt;...

Как можно увеличить размер вектора, который является элементом вектора vector<vector<int>>arr(n, vector <int>)
Написал программу, которая создает вектор 'а' векторов 'b', вектора 'b' содержат 2 числа. Стало...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru