Я знаю, что все контейнеры обеспечивают постоянную операцию size(), кроме forward_list. Но как map, внутренняя структура данных которого является красно-черным деревом, обеспечивает size() постоянную сложность? То же самое для других, таких как вектор и строка. Используют ли они счетчик? Если да, то почему forward_list?
Я смущен, когда читаю книгу. Стандартная библиотека С++: учебник и справочник.