ideas icon indicating copy to clipboard operation
ideas copied to clipboard

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

Open dasfex opened this issue 3 years ago • 0 comments

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

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

dasfex avatar Aug 29 '22 09:08 dasfex