44 / 44 / 24
Регистрация: 01.05.2012
Сообщений: 178
|
||||||
1 | ||||||
Работа с векторами без использования STL и библиотеки <vector>04.04.2016, 19:48. Показов 3635. Ответов 8
Метки нет (Все метки)
Здравствуйте Уважаемые формучане. Подскажите пожалуйста, есть ли смысл писать свой собственный класс Vector если из него всё равно будет выходить подобие STL?
В универе препод дал такое задание. Hо, я как не напишу свой класс Vector у меня всё равно выходит подобие STL. Есть ли смысл тогда его вообще писать если он не будет защищен от внутренних проверок (например, выход элемента за границу вектора) или проще использовать стандартную библиотеку?
Я в итоге программу написал, но с использованием STL и <vector>.
0
|
04.04.2016, 19:48 | |
Ответы с готовыми решениями:
8
Переделать программу без использования библиотеки <vector> Как реализовать стек из Stl в программе без использования библиотеки Работа с файлом без использования библиотеки cstdio Работа со строками. Переписать программу без использования библиотеки <sstream> |
1674 / 1046 / 174
Регистрация: 27.09.2009
Сообщений: 1,945
|
|
04.04.2016, 20:29 | 2 |
Смысл писать свой аналог контейнера из STL вижу в двух случаях: а) для обучения, чтобы понять, что у STL "под капотом"; б) когда есть свои довольно-таки специфические потребности, которым STL не соответствует, а надо, и при этом ещё есть достаточно твёрдые знания предмета и уверенность, что получится не хуже. Во втором случае, конечно же, уверенность крайне желательно проверить сравнительными испытаниями и исчерпывающим тестированием.
0
|
2063 / 1542 / 168
Регистрация: 14.12.2014
Сообщений: 13,402
|
|
04.04.2016, 20:37 | 3 |
По разному. Зависит от потребностей. У меня к примеру vector в его исходном виде никогда не использовался, как миниму допиливался кое-какой функционал. Ну и еще один ньюанс - вектор кое в чем очень безграмотно спроектирован. Объясню в чем. Если динамический массив имеет функцию добавления элемента, то во избежания проблем с быстродействием и фрагментацией памяти шаг роста при ресайзе должен быть управляемым, а допиливание такого в std::vector тянет на полную его переделку. Опять же возможны разные вариации на тему вектора. Например массивы работающее по типу указателей. т.е. сам массив не хранит данные а только ссылку на буфер данных, который ведет подсчет ссылок. При присваивании массивы не копируются, копируется только указатель на буфер. В результате поведение таких массивов соответствует обычным указателям, только со всеми плюшками динамического массива, что в некоторых случаях позволяет экономить память а так же получить при некоторых задачах гораздо более высокое быстродействие, нежели плодя копии данных как это делает std::vector. Опять же под хранение списков указателей на объекты удобнее сделать специализированный для них контейнер, нежели пользовать std::vector<unique_ptr<>> или std::vector<shared_ptr<>>, а особенно если эти списки должны поддерживать сериализацию/десериализацию полиморфного контента.
Есть смысл сделать проверку выхода за границы отключаемой в релизе. У std::vector есть доступ как с проверкой так и без проверки границ. Но к сожалению не переключаемый автоматически при смене конфигурации Debug/Release Добавлено через 3 минуты Вот то то и оно. Потому что когда понадобится пункт б пункт а будет просто необходим.
0
|
44 / 44 / 24
Регистрация: 01.05.2012
Сообщений: 178
|
|
04.04.2016, 22:21 [ТС] | 4 |
по заданию мне запрещено использовать <vector> и STL. Но можно использовать std.
0
|
2063 / 1542 / 168
Регистрация: 14.12.2014
Сообщений: 13,402
|
|
04.04.2016, 22:25 | 5 |
std это неймспейс STL. Сделать свой класс все равно полезно. Говорю по собственному опыту. Ну правда когда мне такие задания не препады давали, а они вытекали из тех заданий которые давали препады, STL еще и в помине не существовало, поэтому приходилось самостоятельно весь этот набор организовывать. Зато потом сразу видно для чего набор того что есть в stl применим и эффективен, а для чего его лучше не использовать.
0
|
8739 / 4317 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
|
05.04.2016, 21:22 | 6 |
это полезно на этапе обучения.
вы, наверное, имели ввиду, если он не будет защищен внутренними проверками. я б такую халтуру вообще бы не принял.
0
|
Падаван С++
447 / 261 / 89
Регистрация: 11.11.2014
Сообщений: 916
|
||||||
07.04.2016, 14:38 | 7 | |||||
Sigma214, ТС`у, тут какие то не шуточные споры, но для практики преподаватель тоже давал задание написать свой вектор, если нужно то вот что я делал
Кликните здесь для просмотра всего текста
может что возьмете, не лучшее и не очень оптимизированное исполнение, но вроде работает P.S помойму тут не финальная версия, и я там накосячил с итераторами немного, ну если нужно будет поправите
0
|
2063 / 1542 / 168
Регистрация: 14.12.2014
Сообщений: 13,402
|
|||||||||||
08.04.2016, 04:00 | 8 | ||||||||||
первая простейшая оптимизация с очисткой:
Естественно. Зачем итератор в деструкторе удаляет элемент на который укзывает? он только указатель а не владелец элемента, соответственно и удалять ничего не должен. А так вот такой код
0
|
tezaurismosis
|
||||||
09.04.2016, 19:25
Работа с векторами без использования STL и библиотеки <vector>
#9
|
||||||
0
|
09.04.2016, 19:25 | |
Создание конфигурации-аналога 'Мини-библиотеки'. Работа со статусами книг без использования регистров. Работа с векторами (<vector>) Работа с STL vector Работа с STL. Поменять vector на list Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |