Реализация std::vector
, поставляемая с Visual Studio 2010 и более ранними версиями, имеет Хорошо известная особенность: метод resize
имеет следующую сигнатуру (совместимую с C++03):
void resize(size_type new_size, value_type value);
вместо сигнатуры, совместимой с C++11, которая использовалась в большинстве других реализаций STL ( как STL или STLport в gcc) задолго до C++11:
void resize(size_type new_size, const value_type& value);
Проблема с первым вариантом заключается в том, что в некоторых ситуациях он не сможет скомпилироваться, если value_type
имеет спецификацию выравнивания:
struct __declspec(align(64)) S { ... };
std::vector v; // error C2719: '_Val': formal parameter with __declspec(align('64')) won't be aligned
Это хорошо известная проблема, для которой нет удовлетворительного обходного пути, кроме использования другой реализации std:: вектор
.
Я ищу хорошо написанную, хорошо протестированную, автономную и STL-совместимую реализацию std::vector
с лицензией в стиле MIT, которую я мог бы использовать. мой проект в качестве предпочтительного контейнера для выровненных типов.
Я думал извлечь его из STLport или gcc STL, но, будучи полностью совместимыми со стандартами, они оба большие и имеют много нетривиальных зависимостей.
(Я был бы совершенно доволен реализацией разумного подмножества std::vector
, которое поддерживало бы только push_back
, clear
, емкость
, размер
, резерв
, изменение размера
, своп
и индексирование массива.)
Есть идеи?