explicit list(
const A& Al = A()
);
explicit list(
size_type n,
const T& v = T(),
const A& Al = A()
);
list(
const list& x
);
list(
const_iterator First,
const_iterator Last,
const A& Al = A()
);
ответ
По крайней мере, исходя из того, что у вас здесь, проблема заключается не в том, как вы проходите список - это с использованием списка вообще. Вы запрашиваете случайный доступ к данным, что означает, что вы, вероятно, должны использовать что-то вроде вектора или дека, а не списка.
Он реализует случайный доступ в определенном смысле, но использует его только для доступа к элементам в последовательности. – Potatoswatter
Я действительно не могу сказать, что это пытается сделать, но у вас есть возможный Segfault во внутреннем цикле:
for (cursor = head_ptr; cursor !=NULL ||count<i; cursor=cursor->link())
{
count++;
}
Ваше условие завершения указывает на то, что если count < i
, вы бы держать зацикливание даже если cursor == NULL
; когда выполняется cursor=cursor->link()
, вы попытаетесь разыменовать NULL
.
Возможно, вы имели в виду cursor !=NULL && count<i
?
#include <list>
using namespace std;
list<Node> my_list;
int index = 0;
for (list<Node>::iterator cursor = my_list.begin();
it!= my_list.end(); ++ cursor, ++ index) {
cout << "index: " << index << “ value: “ << cursor->data() << endl;
}
этот код печатает каждую запись по очереди - вам нужен только внутренний контур (без count pm100
Я не понимаю цели вашего редактирования. Не могли бы вы уточнить? – ZoogieZork