2014-05-09 2 views
0

Мне нужно каким-то образом достичь n-го элемента списка. Я попробовал код ниже, но это не сработало. Есть ли способ получить содержимое n-го элемента списка? Я не могу использовать векторы или очереди, я могу использовать списки. Вот моя попытка:Достижение n-го элемента std :: list в C++

#include <list> 
#include <iostream> 
#include <iterator> 

using namespace std; 

int main() 
{ 
    int x = 5; 
    list <int> mylist; 
    list<int>::iterator it; 
    for (int i=0; i<10; i++) 
    mylist.push_back (i); 

    it = mylist.begin(); 

    for(int i = 0 ; i < 10; i++) 
    { 
     if(it == x) 
     { 
     cout<<"x found"<<endl; 
     break; 
     } 
     advance(it,1); 


    } 
} 
+3

"это не сработало" ??? –

ответ

2

Здесь it имеет iterator типа (итератор для данного элемента списка), необходимо дополнительно разыменовываются, чтобы получить его значение.

Изменить

if (it == x) 

в

if (*it == x) 
    ^^^ 
+1

Лучше, если вы объясните _why_ вместо того, чтобы просто сбрасывать код. Еще раз. –

+0

@LightnessRacesinOrbit Добавлено. – herohuyongtao

1

Функция std::advance() может быть использована для этого следующим образом:

it = mylist.begin(); 
std::advance(it, x); 
2

Чтобы получить п й элемент, вы можете использовать std::advance:

std::list<int>::iterator it = myList.begin(); 
std::advance(it, n); 

Просто убедитесь, что элементов достаточно. Если у вас есть C++ 11, вы можете использовать:

std::list<int>::iterator it = std::next(myList.begin(), n); 

непосредственно.

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