|
Программирование >> Инициализация объектов класса, структура
не работает правильно! 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 )( )
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |