Программирование >>  Инициализация объектов класса, структура 

1 ... 72 73 74 [ 75 ] 76 77 78 ... 395


не работает правильно!

for ( ilist item *iter = at front; начнем с первого iter != at end; пока не последний

++iter ) возьмем следующий

cout << iter->value() << ;

теперь напечатаем последний

реализации ошибка?

cout << iter->value();

Список - это не массив, его элементы не занимают непрерывную область памяти. Инкремент итератора

++iter;

вовсе не сдвигает его на следующий элемент списка. Вместо этого он указывает на место в памяти, непосредственно следующее за данным элементом, а там может быть все что угодно. Для изменения значения итератора нужно воспользоваться членом next объекта ilist item:

iter = iter-> next;

Мы инкапсулировали доступ к членам ilist item набором встраиваемых функций.

class ilist item {

public:

ilist item( int value, ilist item *item to link to = 0 ); int value() { return value; }

iilst item* next() { return next; }

void next( ilist item *link ) { next = link; } void value( int new value ) { value = new value;

void value( int new value

private:

int value; ilist item * next;

Определение класса ilist item теперь выглядит так: };

Вот определение функции display() , использующее последнюю реализацию класса ilist item:

mylist.insert( mylist.find( 8 ), some value );

Перед тем как тестировать операции вставки элементов, нам нужно написать функцию display() , которая поможет нам при отладке. Алгоритм display() достаточно прост: печатаем все элементы, с первого до последнего. Можете ли вы сказать, где в данной



#include <iostream>

class ilist {

public:

void display( ostream &os = cout );

...

void ilist::

display( ostream &os )

os << \n( << size << )( ; ilist item *ptr = at front;

while ( ptr ) {

os << ptr->value() << ;

ptr = ptr->next();

os << )\n ;

Тестовую программу для нашего класса ilist в его текущей реализации можно представить таким образом:



#include <iostream> #include ilist.h

int main() {

ilist mylist;

for ( int ix = 0; ix < 10; ++ix ) { mylist.insert front( ix ); mylist.insert end( ix );

cout <<

Ok: после insert front() и insert end()\n ; mylist.display();

ilist item *it = mylist.find( 8 );

cout << \n

<< Ище

ем значение 8: наш? << ( it ? да!\n : нет!\n );

mylist.insert( it, 1024 ); cout << \n <<

Вставка элемента 1024 после 8\n ; mylist.display();

int elem cnt = mylist.remove( 8 );

cout << \n

<< Удалено << elem cnt << элемент( ов) со значением 8\n ;

mylist.display();

cout << \n << Удален перв элемент\n ;

mylist.remove front(); mylist.display();

cout << \n << Удален! все элементы\n ; mylist.remove all(); mylist.display();

Результат работы программы:

Ok: после insert front() и insert end() (20)( 9 8 7 6 5 4 3 2 1 0 0 1 2 3 4 5 6 7 8 9 ) Ищем значение 8: нашли? да! Вставка элемента 1024 после 8

( 21 )( 9 8 1024 7 6 5 4 3 2 1 0 0 1 2 3 4 5 6 7 8 9 )

Удалено 2 элемент(ов) со значением 8

( 19 )( 9 1024 7 6 5 4 3 2 1 0 0 1 2 3 4 5 6 7 9 )

Удален первый элемент

( 18 )( 1024 7 6 5 4 3 2 1 0 0 1 2 3 4 5 6 7 9 )

Удалены все элементы

( 0 )( )



1 ... 72 73 74 [ 75 ] 76 77 78 ... 395

© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика