数据结构——表(list)
#include <iostream>
#include <list>
using namespace std;
标准类的存储方式为双向循环链表
list类
1 class list 2 { 3 list(); 4 list(int n,const T&value=T()); 5 list(T *first,T *last); 6 //push_back(); 7 //pop_back(); 8 //size(); 9 //以上方法与向量相同 list中也包含 10 void push_front(const T&value); 11 void pop_front(); 12 13 iterator begin(); //迭代器 默认指向第一个node 14 iterator end(); //指向表头 15 16 void erase (iterator pos); 17 void erase (iterator first,iterator last);//删区间 18 iterator insert(iterator pos,const T&value);//插在pos前 19 }
iterator(STL通用)
*iter; //指向节点的值
iter++; //指向next
iter--;
iter1==iter2; //指向同一个位置
*iter1==*iter2; //值相等 位置不一定
实例化:
std::list<int>::iterator iter=list.begin();
删除(!):
list.erase(iter++); //注意++ 否则删除节点之后的表丢失 内存泄露
//此处++运算符重载后 先获取下一节点位置再删除 若++iter则先删除再获取下一位置
注意:iterator iter++=list.begin()是错误的 ++的优先级高于=而iter未赋初值
插入练习:
void doubleData(std::list <T> &aList)
{
std::list<T>::iterator p=aList.begin();
while(p!=aList.end())
{
aList.insert(p,*p);
p++;
}
}
//初始数据:1234 输出结果:11223344
删除重复元素练习: