2010-08-14 2 views
3

код: (?)C++ Iterator делать что?

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 в этом случае? благодаря!

+4

'вектор &res;' не обобщать, поскольку необходимо инициализировать ссылки. – sbi

+0

@sbi, смотри, почему у С ++ есть такая куча незнакомых заметок? так messy – ladyfafa

+0

@ladyfafa: Посмотрите [здесь] (http://stackoverflow.com/questions/3479731/codingbat-like-site-for-c/3480268#3480268) для недавнего разговора о сложности C++. Действительно, поверьте, что [я сказал вам вчера в комментарии] (http://stackoverflow.com/questions/3480320/what-does-the-mean-in-c/3480333#3480333) и забрать книгу C++ для начинающих. – sbi

ответ

6

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++; 
} 
+0

@Stephen :))) понял! – ladyfafa

+0

@ Stephen: отсортированный вектор от низкого до высокого? или наоборот? – ladyfafa

+0

См. Комментарий sbi на вопрос. –