cpp-ru / ideas

Идеи по улучшению языка C++ для обсуждения
https://cpp-ru.github.io/proposals
Creative Commons Zero v1.0 Universal
88 stars 0 forks source link

Конструкторы с resize/reserve policy для std::vector. #534

Closed dasfex closed 1 year ago

dasfex commented 2 years ago

Уже несколько лет почти ежедневно пользуюсь 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 в наш класс, а мы просто пробросим, чтобы не ифать или делать перегрузки.

Реализация тривиальна.

apolukhin commented 1 year ago

Мне идея не нравится так как: