Реализация std::vector?

Хочу научиться тру-вэй c++ программированию, в связи с чем интересуюсь, как же все-таки правильно реализовывать хотя бы такую простую структуру, как вектор? Посоветуйте книжку, или статью, где хорошо и понятно описан процесс.


Интересует больше не сам вектор, а тысячи нюансов, которые возникают при написании большинства контейнеров: вроде того, что надо реализовать 2 варианта доступа по индексу: T&operator[] и const T&operator[], надо правильно реализовать конструктор копирования, оператор += должен быть Vector&, и прочее и прочее.


P.S. Да, я знаю про stl, и я даже сам уже писал аналогичные контейнеры, даже на pure C. Цель не написать велосипед, а научиться грамотному стилю написания продакшн кода. И да, читать исходники STL, конечно, вариант, но не для меня. Пытался, для меня это мешанина случайно набросанных в редактор символов.
  • Вопрос задан
  • 8042 просмотра
Пригласить эксперта
Ответы на вопрос 4
@egorinsk
> Интересует больше не сам вектор, а тысячи нюансов, которые возникают при написании большинства контейнеров

По моему, это описывается в какой-то статье или книжке Бьерна Страуструпа (вот не помню в какой :) ). Именно все эти виды операторов. То, что вы знаете про различия между константным и неконстантным оператором, вселяет надежду, что у вас это получится.

Также (если вы вдруг не видели). можете почитать известный C++ FAQ, там что-то упоминается про операторы: www.parashift.com/c++-faq-lite/

Что касается реализации, подозреваю, без шаблонов вы тут не обойдетесь (ну разве что напишете контейнер для хранения байт и ссылок void* и будете все это кастовать), так что в итоге должно что-то вроде STL-ских исходников и получиться.

Что касается «грамотного стиля написания», тут наверно важна в первую очередь понятность, читаемость человеком и правильные имена идентификаторов.
Ответ написан
Комментировать
AxisPod
@AxisPod
Я бы посоветовал почитать Джефа Элджера C++ for Real Programmers, раскрывает нюансы довольно простым языком. Особо сложного ничего и нет.
Ответ написан
Комментировать
terrier
@terrier
Вот в этом www.stepanovpapers.com/notes.pdf курсе лекций Степанова (создателя STL) как раз проектируют свой вектор с тысячей нюансов.
Ответ написан
@SkyKos
Можно почитать что-нибудь из следующего:

Scott Meyers — Effective STL, Effective C++
Stephen C. Dewhurst — C++ Common Knowledge: Essential Intermediate Programming, C++ Gotchas
Herb Satter — Exceptional C++, More Exceptional C++

Безусловно, прямого ответа на вопрос «Как написать вектор?» там нет, но тонкости вроде правильного написания копирующего конструктора и т.п. там можно найти. Все книги построены в формате «Вопрос — ответ», поэтому читать можно с любого места, и выбирать то, что интересно для вас.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы