Что лучше использовать std::vector или простой массив в c++?
Имею небольшой опыт в программирование на языке c++. Появилась задача анализа данных поступающих от некоторого сенсора (фильтрация, шумоподавление и др).
Данные находятся в виде чисел double.
Вопрос такой: что лучше использовать для работы с такими данными? Простой динамический массив или std::vector или может быть что-нибудь другое?
Из массива и vector'а лучше использовать vector - там итераторы есть, а это более удобный обход массива и при обходе сложнее за границы выйти. Можно еще в сторону List посмотреть, но там данные хранятся по другому и list занимает памяти немного больше в общем случае.
Из массива и vector лучше использовать deque в случаях если не требуется цельного куска памяти под элементы. Если обращаться к элементам только средствами stl, то deque всегда лучше.
@AxisPod@vik523 Всё же стоит учитывать особенности реализации std::deque, так как прямой доступ(через чистые указатели) не указывает на непрерывные куски памяти. И в случая обхода std::deque скорость будет меньше, чем у std::vector (как я понимаю, при хорошой реализации не значительно).
Если знакомы с O-нотацией, то посмотрите вот тут сравнение контейнеров std: john-ahlgren.blogspot.ru/2013/10/stl-container-per...
@AxisPod Странного, по логике оверхед у deque больше, чем у вектора. По сути вектор надстройка над непрерывном блоком памяти, а значит доступ к элементу - простая обертка над операцией с указателем. Или я не прав?
В вашем случае вектор однозначно удобнее будет как владелец памяти: упрощается многие рутинные выделения и освбождения.
А вот выбор способа доступа к элементам зависит от ответов на следующие вопросы:
1) Потребуется ли вам арифметика?
2) Возможна ли векторизация ваших операций?
Если хотя бы на один отвечаете да - с помощью вектора получите указатель и дальше используйте сырые указатели. В противном случае используете те методы доступа, что предлагает контейнер