2015-04-24 4 views
0

Вот код на мой основной метод, это должно быть очевидно, что я пытаюсь сделать с попыткой получить итератор для доступа к элементу по имениИспользование C++ итераторы для доступа к элементу

#include <iostream> 
#include <list> 
#include "PC.h" 
#include "SunServer.h" 

using namespace std; 

int main(){ 
    PC mypc1("John", "645.22.55.34", 128, "admin"); 
    PC mypc2("Mike", "645.22.55.34", 128, "admin"); 
    PC mypc3("Rick", "645.22.55.34", 128, "admin"); 
    PC mypc4("Bill", "645.22.55.34", 128, "admin"); 

    list<PC> my_group; 

    my_group.push_front(mypc1); 
    my_group.push_front(mypc2); 
    my_group.push_front(mypc3); 
    my_group.push_front(mypc4); 
    list<PC>::iterator curr = my_group.begin(); 

    while (curr != mypc2){ 
     // do something 
    } 

} 

Теперь, очевидно, это не работает, но есть ли что-то, что я могу сделать, что было бы эквивалентно этому? Спасибо

+0

ли вы увеличивать свой итератор в то время как {}? Сделайте так: '++ curr' –

+0

Да, это то, что я буду делать, проблема с (curr! = Mypc2), это не исключение, кроме сравнения с объектом, оно хочет, чтобы его сравнивали с местоположением в список, например: (curr! = my_group.end()) –

ответ

5

Это потому, что curr является итератором, и вам нужно что-то, что является PC для сравнения. Для того, чтобы получить ссылку на то, что итератор указывает на, вы просто должны разыменования его (так же, как если бы это был указатель, а не совпадение):

while (*curr != mypc2) { 

Я не уверен, что вы планируете делать внутри цикла, но если то, что вы хотите просто найти mypc2, вы можете использовать std::find:

std::list<PC>::iterator it = std::find(my_group.begin(), 
             my_group.end(), 
             mypc2); 
+0

звучит как солидная идея, не забудьте попробовать, спасибо, я не знал, что «найти» было вещь –

+0

@HunterTipton, я рекомендую прочитать [этот reference] (http://en.cppreference.com/w/cpp/algorithm) и посмотреть, какие существуют другие алгоритмы. Я также рекомендую 'std :: vector', если у вас нет оснований не использовать его. – chris

+0

Ну, я должен уметь добавлять и удалять в любой точке контейнера, что, насколько мне известно, вектор не может сделать –

Смежные вопросы