Я объявляю vector<Bla> blaVec
и пишу функцию:
template<typename Iterator>
void doSomething(Iterator first, Iterator last) { ... }
Затем я вызываю эту функцию на blaVec
с помощью:
doSomething(blaVec.begin(), blaVec.end());
Однако я действительно чего-то хотел быкороче, как doSomething(blaVec)
, но без указания vector
в определении функции.В принципе, существует ли хороший стандартный способ указать только первый итератор или, может быть, диапазон [begin, end] итераторов, как это делается Boost.Range .
Я алгоритмпарень, так что я действительно не хочу вдаваться в слишком общие сложные решения.Большую часть своей жизни я писал такие функции:
void doSomething(vector<int> & bla) { ... }
Однако в наши дни я часто пишу doSomething
, который работает с list
и deque
и vector
, так что это более общее решениебыл вызван, поэтому я пошел с итераторами.Но это только кажется слишком многословным решения.Что вы предлагаете?
- doSomething (vector & bla) {...}
- doSomething (Итератор первый, Итератор последний) {...}
- doSomething (/ * некоторая структура данных диапазона * /) {...}