Главная Случайная страница Контакты | Мы поможем в написании вашей работы! | ||
|
}
//определение класса итератора
class{
node* current; //указатель на текущий элемент списка
public:
list_iter(node* new_node=0):current(new_node)
{ }
string & operator* () //разыменование итератора
{
return current->str;
}
list_iter& operator++() // инкремент
{current = current->next;
return *this;
}
bool operator!=(list_iter other) { //сравнение итераторов
return (other.current!= current);
}
bool operator==(list_iter other) { //сравнение итераторов
return (other. current == current);
}
};
В классе закрытый компонент – указатель current на объект класса node, представляющий элемент (узел) списка.
В конструкторе current присваивается адрес узла списка или 0 по умолчанию.
Базовые операции для итераторов реализованы как операции – функции.
Используя классы node и list_iter, определим контейнер в виде односвязаного списка
class liststr {
node * beg_node; // первый элемент
node * end_node; // последний элемент
public:
liststr (string&st); // конструктор
void append(string&st); // добавить элемент в конец списка
~liststr(); // деструктор
list_iter begin() // начало списка
{return list_iter(beg_node);}
list_iter end() // конец списка, вернуть ссылку на пустой элемент
{return list_iter(end_node)->next;}
};
//===========================
lister::liststr (string&st){
node * temp=new node;
temp->next=0;
temp->str=st;
beg_node=temp;
end_node=temp;
}
//======================
void lister:: append(string&newStr) {
node * temp=new node;
temp->next=0;
temp->str=newStr;
end_node-> next=temp;
end_node=temp;
}
//==================================
//Print.h
template <class Т>
void Print(T beg, T end) {
int i=0;
while(beg!=end)
{cout<<”[“<<i++<<”]”<<*beg<<”\t”;
++beg;}
cout << endl;
}
//==============================
#include <iostream>
Дата публикования: 2014-11-28; Прочитано: 178 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!