问题标题: 简单的链表

0
0
已解决
薛乘志
薛乘志
初级启示者
初级启示者

由于我觉得链表太难用了,所以写了一个简单的链表

在你的程序的头文件后面加上(没错就是这么简单)

#include <list>
namespace std {
    template <class T>
    class easy_list {
        private:
            list<T> _list;
            typename list<T>::iterator _it;
        public:
            list<T> *operator->() {
                return &_list;
            }
            T &operator[](int _i) {
                _it = _list.begin();
                for (int i = 0; ; _it++, i++) {
                    if (i == _i) {
                        return *_it;
                    }
                }
            }
            typename list<T>::iterator &operator()(int _i) {
                _it = _list.begin();
                for (int i = 0; ; _it++, i++) {
                    if (i == _i) {
                        return _it;
                    }
                }
            }
    };
}

定义简单的链表(欸嘿非常眼熟):

easy_list<int> a;

所以这个简单的代码怎么访问复杂的链表成员函数呢?用->!

a->push_back(1);
a->push_back(2);

众所周知,链表需要复杂的一屁的迭代器访问,这个不一样了!我直接:

cout << a[0] << " " << a[1] << endl;
a[0] = 3;

链表操作的许多都要用到指向元素的迭代器,没关系,我们有:

a->erase(a(2));

a(下标) 返回的是这个下标对应的迭代器

 

 

 

完整使用代码:

#include <iostream>
#include <list>
namespace std {
    template <class T>
    class easy_list {
        private:
            list<T> _list;
            typename list<T>::iterator _it;
        public:
            list<T> *operator->() {
                return &_list;
            }
            T &operator[](int _i) {
                _it = _list.begin();
                for (int i = 0; ; _it++, i++) {
                    if (i == _i) {
                        return *_it;
                    }
                }
            }
            typename list<T>::iterator &operator()(int _i) {
                _it = _list.begin();
                for (int i = 0; ; _it++, i++) {
                    if (i == _i) {
                        return _it;
                    }
                }
            }
    };
}
using namespace std;
int main() {
    easy_list<int> a; //定义
    a->push_back(1); //加入元素
    a->push_back(2);
    cout << a[0] << " " << a[1] << endl; //下标访问
    a[0] = 3; //赋值
    a[1] = 4;
    cout << a[0] << " " << a[1] << endl;
    a->push_back(5);
    cout << a[2] << endl;
    a->erase(a(2)); //删除元素
    cout << a[2]; //这时程序会输出不知道是玩意什么的数字
    return 0;
}

 


0
已采纳
被禁言 席清源
席清源
修练者
修练者
typename list<T>::iterator &operator()(int _i) {
                _it = _list.begin();
                for (int i = 0; ; _it++, i++) {
                    if (i == _i) {
                        return _it;
                    }
                }
            }

如果始终找不到匹配的下标呢?

T &operator[](int _i) {
                _it = _list.begin();
                for (int i = 0; ; _it++, i++) {
                    if (i == _i) {
                        return *_it;
                    }
                }
            }

同理

0
我要回答