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