Сообщение Re: как передавать элементы контейнера в функцию от 19.04.2016 18:45
Изменено 19.04.2016 18:47 rg45
Здравствуйте, sci_reseacher, Вы писали:
_>Нужно внутри функции получить доступ к элементам контейнера только на чтение. Как более правильно (эффективнее) это сделать?
_>В каких случаях следует использовать передачу ссылки на контейнер (как в f1), а в каких случаях итераторы (как в f2, почему-то в stl именно так):
_>
_>Нужно внутри функции получить доступ к элементам контейнера только на чтение. Как более правильно (эффективнее) это сделать?
_>В каких случаях следует использовать передачу ссылки на контейнер (как в f1), а в каких случаях итераторы (как в f2, почему-то в stl именно так):
_>
_>void f1(const std::vector<int> & x){
_> // ... used all elements of x
_>}
_>void f2(const std::vector<int>::const_iterator beg,const std::vector<int>::const_iterator end){
_> // ... used all elements
_>}
_>// ...
_>std::vector<int> y = {1,2,3};
_>f1(y);
_>f2(y.begin(),y.end());
_>using boost::iterator_range;
using std::vector;
void f3(iterator_range<vector<int>::const_iterator> range){
for (auto value : range)
{
// use of elements of the range
}
}
// ...
std::vector<int> y = {1,2,3};
f3(y);
f3(boost::make_iterator_range(boost::next(y.begin()), boost::prior(y.end())));
_>Здравствуйте, sci_reseacher, Вы писали:
_>Нужно внутри функции получить доступ к элементам контейнера только на чтение. Как более правильно (эффективнее) это сделать?
_>В каких случаях следует использовать передачу ссылки на контейнер (как в f1), а в каких случаях итераторы (как в f2, почему-то в stl именно так):
_>Нужно внутри функции получить доступ к элементам контейнера только на чтение. Как более правильно (эффективнее) это сделать?
_>В каких случаях следует использовать передачу ссылки на контейнер (как в f1), а в каких случаях итераторы (как в f2, почему-то в stl именно так):
| ccode | |
_> | |
using boost::iterator_range;
using std::vector;
void f3(iterator_range<vector<int>::const_iterator> range){
for (auto value : range)
{
// use of elements of the range
}
}
// ...
std::vector<int> y = {1,2,3};
f3(y);
f3(boost::make_iterator_range(boost::next(y.begin()), boost::prior(y.end())));