Как указано в answer в моем question, я буду использовать векторы, чтобы изменить размер до N, читать и писать n-й элемент, где n < N. Если n слишком близко к N, тогда я создам другой вектор размера N + M и скопировать все элементы из 1-го вектора в 2-й и удалить 1-й. Так что, если я занимаюсь управлением памятью, и нет вставки и удаления, существуют ли преимущества использования вектора вместо массива, особенно для этого случая?stl vector vs array
P.S. Изменение размера и блокировка копирования потребуются редко.
EDIT: Как требовал Дэвид Родригес - dribeas, это программа технического анализа. Исторические цены на акции сохраняются как полосы OHLC в векторах. Поэтому мне действительно нужно хранить элементы в векторах. Также есть некоторые другие классы вычислений, называемые индикаторами, выполняются расчеты, основанные на ценах акций. Когда новая цена поступает через tcp, сначала акции обновляют свои бары и сразу же называет все связанные с ними индикаторы «вычисляют методы», говоря: «Хорошо, ребята, мой n-й бар был обновлен в это время. Все операции основаны на задачах, то есть запас никогда не обновляется до окончания последнего обновления, и аналогичным образом индикатор никогда не выполняет вычисления, пока последний продолжается. Одна задача за раз. И если новые обновления продолжаются слишком быстро, их можно кэшировать как задачи. Таким образом, акции могут дождаться завершения последнего обновления, и индикатор может аналогичным образом сохранить свои задачи, пока он был рассчитан, но запас не должен ждать, пока его индикаторы закончат свою работу. Здесь начинается проблема. Если приходит обновление, то запасы сначала выглядят его размер вектора штриха и проверяют, нужно ли его изменять. При необходимости он изменяет размеры своих векторов, хотя могут быть некоторые индикаторы, все еще работающие до предыдущего обновления. Индикатор может достигать своих данных о запасах, поскольку данные могут быть изменены. До сих пор у меня нет никаких проблем, потому что подсчеты индикаторов выполнялись очень быстро. Но я обеспокоен. В качестве решения акции могут генерировать второй более крупный вектор-бар и сообщать своим индикаторам, что они могут достигнуть второго вектора для предстоящих вычислений. В конце концов, через пару секунд весь доступ к первому вектору гибнет, и он может быть удален ужасно.
Как я объяснил в комментариях к моему ответу, вы не можете вставлять элементы в вектор из одного потока и читать элементы из одного и того же вектора в другом потоке. Векторное перераспределение - это не единственная проблема; внутренняя бухгалтерская отчетность, выполняемая вектором, также является проблемой, и вы не можете делать какие-либо предположения о том, что это значит. После того, как вы предоставите доступ к вектору к потребительским потокам, вы не сможете изменить его снова, если только (a) вы не синхронизируете доступ к нему, что вы сказали, что не хотите делать, или (б) вы получаете всех потребителей прекратить доступ к вектору, что, вероятно, сложно. – 2010-12-04 01:01:56
Для оптимальной производительности в многопоточной среде вы можете захотеть реализовать свой собственный контейнер. – 2010-12-04 01:03:46
@ Джеймс Макнеллис: Что вы подразумеваете под внутренней бухгалтерией? – 2010-12-04 01:04:20