TGViewer
C++ geek C++ geek @cpp_geek · 3.53K subscribers
Post #345 2.14K
Невидимый враг: std::vector<bool>

Кажется, что std::vector<bool> — обычный вектор из bool. Но на самом деле это не так.

Под капотом vector<bool> хранит биты плотно упакованными (1 бит на элемент), а не как bool (обычно 1 байт). Из-за этого:

- Элемент — это не bool&, а прокси-объект (std::vector<bool>::reference).
- Нельзя получить настоящий указатель на элемент: &v[0] не даст bool*.
- Код работает медленнее из-за лишней возни с битовыми масками.

Пример неожиданности:


std::vector<bool> v{true, false};
auto p = &v[0]; // ❌ Ошибка! Нет bool*


Хотите реально быстрый и предсказуемый контейнер?

- Используйте std::vector<char> или std::vector<uint8_t> для хранения флагов.
- Или подключите boost::dynamic_bitset, если нужна именно битовая упаковка.

Итог: vector<bool> — это костыль ради экономии памяти. Если важны скорость и нормальная семантика — обходите стороной.

➡️ @cpp_geek
  • 👍 9
  • 💩 3
  • 👾 1
More from @cpp_geek
  1. Sep 29, 2026Dependency Injection Dependency Injection (DI) — это паттерн проектирования, который позво…
  2. Sep 24, 2026🎥 Вебинар по C++: Паттерн многопоточного программирования «Producer-Consumer» Когда неско…
  3. Sep 24, 2026Execution policy для параллельных алгоритмов Execution policy в C++ — это новшество, введе…
  4. Sep 17, 2026В чем разница между git fetch и git pull? Разница между этими командами заключается в том,…
  5. Sep 15, 2026std::tie std::tie — это функция, которая создает кортеж ссылок на lvalue из своих аргумент…
  6. Sep 11, 2026move constructor Move-конструктор — это специальный конструктор, который позволяет эффекти…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →