И можно std::vector::resize_policy для консистентности.
Также такой конструктор сможет сократить код и в некоторых других сценариях:
void f(std::vector<int> data) {} // не обращаем внимания на копию
std::vector<int> data;
data.reserve(size);
f(data);
// vs
f(std::vector<int>(std::vector::reserve_policy, size));
std::vector<std::vector<int>> data(size1);
for (auto& vec : data) {
vec.reserve(size2);
}
// vs
std::vector<std::vector<int>> data(size1, std::vector<int>(std::vector::reserve_policy, size2));
Подозреваю, это ещё может открыть компилятору возможность немножко больше пооптимизировать код.
Плюс можно какие-то удобные обёртки теперь писать, где пользователь сам может отдать policy в наш класс, а мы просто пробросим, чтобы не ифать или делать перегрузки.
не добавляется новых функциональных возможностей (такого же поведения можно добиться через reserve)
проще прочитать две средние строки, чем одну длиннющую
последний пример работает не так как ожидается - память прорезервирована не будет для всех элементов. Так что фича добавляет сложностей и неоднозначностей
Уже несколько лет почти ежедневно пользуюсь std::vector. И очень частая ситуация (95% случаев), когда код выглядит примерно так:
И имхо очень неудобно делать это постоянно в несколько строк. Круто было бы иметь конструктор вроде:
И можно
std::vector::resize_policy
для консистентности.Также такой конструктор сможет сократить код и в некоторых других сценариях:
Подозреваю, это ещё может открыть компилятору возможность немножко больше пооптимизировать код.
Плюс можно какие-то удобные обёртки теперь писать, где пользователь сам может отдать policy в наш класс, а мы просто пробросим, чтобы не ифать или делать перегрузки.
Реализация тривиальна.