Когда вы думаете об этом question, я начинаю задаваться вопросом, являются ли std::copy()
и/или std::fill
специализированными (я действительно подразумеваю оптимизацию) для std::vector<bool>
.
Требуется ли это стандартом С++ или, возможно, это общий подход к поставщикам библиотеки std С++?
Проще говоря, мне интересно узнать, есть ли следующий код:
std::vector<bool> v(10, false);
std::fill(v.begin(), v.end(), true);
в любом случае лучше/отличается от этого:
std::vector<bool> v(10, false);
for (auto it = v.begin(); it != v.end(); ++it) *it = true;
Чтобы быть очень строгим - можете, скажем: std::fill<std::vector<bool>::iterator>()
перейти во внутреннее представление std::vector<bool>
и установить их все байты вместо отдельных битов? Я полагаю, что создание std::fill
друга std::vector<bool>
не является большой проблемой для поставщика библиотеки?
[ОБНОВЛЕНИЕ]
Следующий связанный вопрос: могу ли я (или кто-либо еще:) специализировать такие алгоритмы для let say std::vector<bool>
, если не уже специализированный? Это разрешено стандартом С++? Я знаю, что это будет не переносимым - но только для одной выбранной std библиотеки С++? Предполагая, что я (или кто-либо другой) найдет способ добраться до std::vector<bool>
частных частей.