Это определение класса
template <typename key_type, typename mapped_type>
class mymap {
public:
node<key_type, mapped_type> *root;
/* Utility Functions */
int height(node<key_type, mapped_type> *);
int getBalance(node<key_type, mapped_type> *);
node<key_type, mapped_type> *newNode(key_type, mapped_type);
node<key_type, mapped_type> *rightRotate(node<key_type, mapped_type> *);
node<key_type, mapped_type> *leftRotate(node<key_type, mapped_type> *);
node<key_type, mapped_type> *insert_node(node<key_type, mapped_type> *, key_type, mapped_type);
node<key_type, mapped_type> *minValueNode(node<key_type, mapped_type> *);
node<key_type, mapped_type> *deleteNode(node<key_type, mapped_type> *, key_type);
void insert(key_type, mapped_type);
// Constructor
mymap()
{
root = NULL;
}class iterator {
public:
node<key_type,mapped_type> *ptr;
iterator(){
ptr = NULL;
}
/*void iterator(iterator &x) {
ptr = x.ptr;
}*/
void operator++(int) {
ptr = increment(ptr);
}
void operator=(const iterator &it) {
ptr = it.ptr;
//return (*this);
}/*void operator--(int) {
ptr = decrement(ptr);
}*/
void operator++() {
ptr = increment(ptr);
}
/*
node <key_type,mapped_type>* operator--() {
return *(decrement(ptr));
}
bool operator !=(iterator itr) {
return (ptr != itr.ptr);
}bool operator ==(iterator itr) {
return (ptr == itr.ptr);
}
*/
};
iterator begin() {
iterator it ;
node<key_type,mapped_type> * tmp = root;
while (tmp->left != NULL)
tmp = tmp->left;
it.ptr = tmp;
return it;
}
iterator end() {
iterator it;
it.ptr = NULL;
return it;
}
};
В основном этот код не компилируется и выдает ошибку в строке 10. Может быть, потому что я пытаюсь сделать что-то не так, перегружая postfix ++ и операторы присваивания.
mymap<int, int> A;
A.insert(1, 5);
A.insert(2, 5);
A.insert(3, 5);
A.insert(4, 5);
mymap<int,int> :: iterator it = A.begin();
mymap<int,int> :: iterator it1 = A.end();
it1 = it++;
Пожалуйста, помогите :(. Это реализация карты AVL, которую я пытаюсь выполнить.
Это ссылка на полный файл карты, если это необходимо.
https://www.box.com/s/oom4bjnve9zmlpdcevip
У вас неправильные типы возврата. Ни префиксные, ни постфиксные операторы не возвращаются void
, Префикс должен возвращать iterator &
и postfix должен вернуть iterator
пример.
Для справки: http://msdn.microsoft.com/en-US/library/f6s9k9ta%28v=VS.80%29.aspx
it1 = it++;
Это позволит оценить postincrement вашего итератора и использовать тип возвращаемого значения (в вашем объявлении void
) инициализировать it1
, что является ошибкой компилятора. Обратите внимание, что при перегрузке операторов вы должны делай как int
с. То есть Старайтесь имитировать поведение операторов в существующих типах, чтобы избежать путаницы. Это включает в себя наличие operator=
возвращая ссылку на объект, который был назначен.