C ++ Iterator, что делать? - PullRequest
       12

C ++ Iterator, что делать?

3 голосов
/ 15 августа 2010

Код:

  vector<weight *> &res;
  vector<weight>::iterator it = lower_bound(w.begin(), w.end(), queryweight);
  while(it != w.end()) {
      weight *w  = &(*it);
      if(w->weight >= 60) break;
      res.push_back(w);
      it++;
  }

Я думаю, что lower_bound выполняет двоичный поиск (?), Так что, в конце концов, собирается ли код C ++ получить требуемые веса?Где это начинается и заканчивается?И что делает петля while в этом случае?спасибо!

1 Ответ

6 голосов
/ 15 августа 2010

lower_bound возвращает самый нижний итератор (то есть положение в векторе) элемента, который на не меньше, чем третий параметр - здесь, queryweight. Затем петля while проходит через остальные элементы и, пока не достигнет элемента, у которого wight больше или равно 60, добавляет их к вектору res. Я предполагаю, что входной вектор w отсортирован, иначе эта функция не имела бы особого смысла.

Строка за строкой:

// Declare a vector of pointers to 'weight' objects, called res.
// (I assume here that the "&" in the original question was a mistake.)
vector<weight *> res;

// Find the iterator that points to the lowest element in vector 'w'
// such that the element is >= queryweight.
vector<weight>::iterator it = lower_bound(w.begin(), w.end(), queryweight);

// From this element forwards until the end of vector 'w'
while(it != w.end()) {
    // Get a pointer to the element.
    weight *w  = &(*it);
    // If the 'wight' property of this element is >= 60, stop.
    if(w->wight >= 60) break;
    // Push the element onto the 'res' vector.
    res.push_back(w);
    // Move to the next element.
    it++;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...