Информация об изменениях

Сообщение Re: как передавать элементы контейнера в функцию от 19.04.2016 18:45

Изменено 19.04.2016 18:56 rg45

Здравствуйте, sci_reseacher, Вы писали:

_>Нужно внутри функции получить доступ к элементам контейнера только на чтение. Как более правильно (эффективнее) это сделать?


_>В каких случаях следует использовать передачу ссылки на контейнер (как в f1), а в каких случаях итераторы (как в f2, почему-то в stl именно так):

  ccode
_>
_>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())));
Re: как передавать элементы контейнера в функцию
Здравствуйте, sci_reseacher, Вы писали:

_>Нужно внутри функции получить доступ к элементам контейнера только на чтение. Как более правильно (эффективнее) это сделать?


_>В каких случаях следует использовать передачу ссылки на контейнер (как в f1), а в каких случаях итераторы (как в f2, почему-то в stl именно так):

  <ccode>
_>
_>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())));