2014-01-05 1 views
3

Мне недавно пришлось написать кучу неприятных std::enable_if специализаций, чтобы правильно разобраться с vector<bool> тем, что в противном случае было бы красивым и чистым дизайном. Существует some talk, чтобы удалить текущий vector<bool>, который, должно быть, никогда не был, но в то же время я хотел бы иметь нормальный vector<bool>, который является фактическим стандартным контейнером и который внутренне использует один массив булевых (std::deque, таким образом, не является вариантом , поскольку его хранение не гарантируется непрерывным).мы можем создать нормальный вектор <bool> с использованием пользовательского распределителя?

В то время как можно было бы обернуть логическое, как, например, предложенное here, мне было интересно, можно ли также исправить vector<bool>, предоставив пользовательский распределитель? Если да, то как это реализовать? И почему или почему бы это решение не было предпочтительнее обертывания булевского значения?

+0

Вы просмотрели boost :: container :: vector? –

ответ

1

Я думаю, что это невозможно изменить поведение vector<bool> с пользовательским распределителем. Аллокаторы предназначены для обработки всех запросов на выделение и освобождение памяти для контейнера. Они также могут создавать или уничтожать объекты по указанному адресу, но они не могут повлиять на расположение объектов внутри контейнера. Помимо других вещей vector<bool> не обязательно сохраняет свои данные в непрерывном буфере памяти. Таким образом, у вас есть использование другого контейнера или другого типа элемента для вектора (например, char)

0

попробуйте использовать повышение :: контейнер :: вектор, который работал для меня

Смежные вопросы