быстрые альтернативы stl::vector
От: RikkiTikkiTavi Россия  
Дата: 23.09.14 14:54
Оценка: :))) :))) :))) :)))
Всем привет!

Известно, что контейнеры в stl (в частности, vector) в общем случае не очень подходят для высоконагруженных мест в коде.
Есть определенные закидоны, которые надо знать: clear на самом деле не чистить память, size() на самом деле вычисляется каждый раз, ...
Но сегодняшнее "открытие" совсем добило:
std::vector<float> v1, v2;
...
for (...)
{
    v1.insert( v1.end(), v2.begin(), v2.end() );
}

Размер v2, как правило, равен 3 элементам. В тяжелом случае таких добавлений случилось у меня около 600000. Суммарное время (вместе с другой работой) примерно 2 минуты.
Заменив insert на
    const size_t oldSize = v1.size();
    const size_t addSize = v2.size();
    v1.resize( oldSize + addSize );
    memcpy( &v1[oldSize], v2.data(), addSize*sizeof(float) );

получаем примерно 6 секунд — ускорение в 20 раз.

Отсюда вопрос — посоветуйте альтернативную быструю библиотеку контейнеров.
Интересуют, пожалуй, простые типы и POD-структуры. Чтобы была актуальной, поддерживалась с последними стандартами C++11.

Посматриваю на eastl, но смущает, что последнее обновление сделано 3 года назад...

Спасибо
Отредактировано 23.09.2014 15:00 RikkiTikkiTavi . Предыдущая версия . Еще …
Отредактировано 23.09.2014 14:57 RikkiTikkiTavi . Предыдущая версия .
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.