пятница, 6 апреля 2012 г.

Почему я не люблю vector

Многие любят использовать шаблон vector, везде, где только можно, не смотря на то, для чего он используется. Он вроде бы и как массив, и в тоже время лучше. Плюсы, несомненно, есть и я пожалуй начну с них:
  1. Всё уже сделано и проверено за программиста - пожалуй самый главный плюс, ведь преодолеть лень бывает трудно.
  2. Внешне работа с vector мало чем отличает от работы с массивом - это удобно.
  3. Это стандартная библиотека - можно назвать под разделом первого пункта, но лучше выделить.
  4. Vector - это шаблон и позволяет работать почти со всеми типами данных.
На самом деле весомых аргументов "за", кроме удобства я не нашёл. "Против" же находились в практике и, поэтому, они могу показаться слишком частными, но всё же:
  1. Не смотря на всю схожесть, vector - это не массив. Элементы vector'а хранятся в памяти не последовательно, а значит при обходе элементов последовательно, память может обходится в случайном порядке. Для небольшого количества данных это не заметно, однако чем больше - тем заметнее как уменьшается скорость работы программы.
  2. Vector реализует линейный список. Это минус скорее всего не вектора, а программистов, сильно полюбивших его, и использующих vector везде. Иногда данные представляют собой не линейную последовательность, а более сложную - некоторый граф(и, конечно, его частные случаи - сеть, дерево и т.д.) и лучше бы создать(либо найти уже готовую) свою структуру данных, которая будет подходить для задачи.
  3. Vector - шаблон. Проблемы начинаются, когда работа ведётся с векторными типами данных и классами/структурами содержащими их, ссылки на них и так далее. Справедливости ради, стоит заметить что использовании SSE-раширений всегда есть некоторые проблемы, однако незнание внутреннего устройства vector'а усугубляет их.
Вот основные минусы, которые я нашёл. Работал с vector'ом я не так много, предпочитаю писать структуры данных сам - под ситуацию, это оказывается эффективней.И небольшой вывод: в обычных случаях, когда просто требуется хранить небольшое количество данных, не обрабатывая их особым образом, vector - удобная и полезная вещь, в остальных случаях - структуру данных лучше написать самому, либо найти подходящий готовый аналог.

Комментариев нет:

Отправить комментарий