Closed apolukhin closed 3 years ago
Дмитрий, 28 марта 2018, 12:31 В stl структура std::vector (std::string) точно определена. У остальных контейнеров реализация может меняться в широких пределах. Текущая stl абстрагирована от реализации. Она предполагает, что разработчика не будет заботить внутреннее устройство контейнеров.
dreverser, 29 марта 2018, 12:25 А причем здесь структура ? я предлагаю добавить метод capacity()
А какая будет имплементация пусть думают в каждом конктретном стл те кто его реализуют - МС ГЦЦ Кланг итд
Дмитрий, 29 марта 2018, 14:16 На мой взгляд это задача для "stl 2.0", - отойти от концепции асбтрактных требований к полному описанию структур контейнеров. То, что в рамках стандарта могут быть разные имплементации под одним именованием, - нехорошо. Это доказал size() для листа, который до c+11 на gcc вычислялся через полный обход контейнера. Его приходилось избегать. У Microsoft же была реализация с отдельным счетчиком. И вызов size() происходил без задержек. Вычислить capacity() у std::vector - не проблема. Как capacity() будет считаться для unordered_map - не понятно и не очевидно.
dreverser, 29 марта 2018, 20:52 Дмитрий, для вас не очевидно, для меня очевидно, но мне нужен доступ к ноде что бы получить ее размер, а она в привате.
Поэтому не вижу проблем в самих контейнерах это имплементировать.
Собственно почему велосипеды и пишутся. Потому что легче написать свое, чем потратиь время на убеждения других что бы добавить что то с стандартное.
Дубликат #69
Перенос предложения: голоса +3, -6 Автор идеи: dreverser
Хочется иметь возможность быстро получить размер используемой памяти у контейнера.
Очень странно что у контейнеров есть столько ненужных на мой взгяд методов, которые никак не помогают вычислить объем аллоцируемой памяти.
Разработчики парятся какими то вычислениями что бы узнать.
https://stackoverflow.com/questions/25375202/how-to-measure-memory-usage-of-stdunordered-map
И все равно это будет не точно. Поскольку есть еще размер ноды.
Самый точный способ выглядит уродски
https://gist.github.com/yuyoyuppe/51e098c1adf64114d2b1
В string есть метод capacity а в контейнерах нет.
Не знаю почему. Но хочется что бы появились.