ideas
ideas copied to clipboard
Конструкторы с resize/reserve policy для std::vector.
Уже несколько лет почти ежедневно пользуюсь std::vector. И очень частая ситуация (95% случаев), когда код выглядит примерно так:
std::vector<SomeMyType> data;
data.reserve(some_value);
И имхо очень неудобно делать это постоянно в несколько строк. Круто было бы иметь конструктор вроде:
std::vector<int> data(std::vector::reserve_policy, some_value);
И можно 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 в наш класс, а мы просто пробросим, чтобы не ифать или делать перегрузки.
Реализация тривиальна.