Как появился std :: vector <bool>?


15

Сегодня практически все разработчики C ++ соглашаются с тем, что это std::vector<bool>было ошибкой, поскольку это обманчиво не контейнер, и его варианты использования в значительной степени совпадают с таковыми в std::bitsetлюбом случае.

Как это было признано в стандарте? Это было спорным в то время? Каковы были основные аргументы в поддержку?


Не было std::vectorнаписано раньше std::bitset?
Ден04


3
Кроме того, Херб Саттер много пишет о std::vector<bool> здесь и здесь . Я думаю, что если вы немного углубитесь в его сочинения, вы найдете всю необходимую вам информацию.
Роберт Харви

Ответы:


10

От Херба Саттера, используя приведенную ссылку:

Специализация на вектора была намеренно включена в стандарт, чтобы дать пример того, как написать прокси-контейнер. «Прокси-контейнер» - это контейнер, объекты которого вы не можете получить напрямую; вместо предоставления вам указателей или ссылок на содержащийся объект, прокси-контейнер предоставляет вам прокси-объекты, которые можно использовать для косвенного доступа или манипулирования содержащимся объектом. Проксированные коллекции могут быть полезны в тех случаях, когда к объектам в коллекции не всегда можно получить надежный доступ напрямую, как если бы они находились в памяти, как, например, для дисковой коллекции, которая автоматически помещает фрагменты себя в память и из памяти под обложками, как необходимо. Таким образом, идея состояла в том, чтобы показать, как сделать такую ​​прокси-коллекцию отвечающей требованиям «контейнера».

И да, тогда была дискуссия.

  1. Чтобы узнать все подробности, зайдите в DejaNews и выполните мощный поиск Subject = "vector and bool" и Forum = " c ++ ". Дискуссии проходили в январе / феврале 1997 года. Вы также найдете более свежие дискуссии от людей, спрашивающих, как отключить специализацию вектора; см. конец этой статьи для моего совета.

Остальное уже история. И я ненавижу видеть оставшийся без ответа вопрос с такими хорошими ссылками.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.