当前位置:首页 C++ > 正文

c++list容器用类模拟实现:迭代器遍历数据(含++、*、=运算符的重载)

作者:野牛程序员:2024-01-03 15:15:14 C++阅读 2355

c++list容器用类模拟实现:迭代器遍历数据(含++、*、=运算符的重载)

#include <iostream>

template <typename T>
class MyList {
private:
    struct Node {
        T data;
        Node* next;
        Node(const T& value) : data(value), next(nullptr) {}
    };

    Node* head;

public:
    // 定义迭代器类
    class Iterator {
    private:
        Node* current;

    public:
        Iterator(Node* node) : current(node) {}

        // 重载前置++运算符
        Iterator& operator++() {
            if (current) {
                current = current->next;
            }
            return *this;
        }

        // 重载后置++运算符
        Iterator operator++(int) {
            Iterator temp = *this;
            ++(*this);
            return temp;
        }

        // 重载*运算符
        T& operator*() {
            return current->data;
        }

        // 重载==运算符
        bool operator==(const Iterator& other) const {
            return current == other.current;
        }

        // 重载!=运算符
        bool operator!=(const Iterator& other) const {
            return !(*this == other);
        }
    };

    MyList() : head(nullptr) {}

    ~MyList() {
        while (head) {
            Node* temp = head;
            head = head->next;
            delete temp;
        }
    }

    void push_back(const T& value) {
        Node* newNode = new Node(value);
        if (!head) {
            head = newNode;
        } else {
            Node* current = head;
            while (current->next) {
                current = current->next;
            }
            current->next = newNode;
        }
    }

    // 获取链表头部的迭代器
    Iterator begin() {
        return Iterator(head);
    }

    // 获取链表尾部的迭代器
    Iterator end() {
        return Iterator(nullptr);
    }

    // 其他成员函数可以根据需要进行添加
};

int main() {
    MyList<int> myList;
    
    myList.push_back(10);
    myList.push_back(20);
    myList.push_back(30);

    // 使用迭代器遍历数据
    for (MyList<int>::Iterator it = myList.begin(); it != myList.end(); ++it) {
        std::cout << *it << " ";
    }

    return 0;
}


野牛程序员教少儿编程与信息学奥赛-微信|电话:15892516892
野牛程序员教少儿编程与信息学竞赛-微信|电话:15892516892
相关推荐

最新推荐

热门点击