c++的STL(标准模版库)提供了链表类的操作,称为list(表),是双向链表实现的
链式存储结构在实现插入、删除操作时不需要移动大量的数据元素。所以,链式存储结构适用于经常需要进行插入和删除操作的线性表
迭代器的辅助,头文件为<iterator>
advance()可令迭代器前进
#include<iterator>
void advance(inputiterator& pos, Dist n);
使名为pos的迭代器前进n个元素
Dist是一个整型数
例如:
#include<iostream>
#include<iterator>
#include<list>
using namespace std;
int main()
{
list<int>a;
list<int>::iterator pos;
for(int i = 1; i <= 9; i++)
a.push_back(i);
pos = a.begin(); //指针指向第一个元素的下标
advance(pos, 2); //指针向前移动2个单位,则此时指针指向第三个元素的下标
advance(pos, -1); //指针向后移动一位,则此时指针指向第二个元素的下标
}
remove() //删除指定的元素
例题:
//STL的链式存储结构--------list链表
#include<cstdio>
#include<iostream>
#include<string>
#include<list>
#include<iterator>
#include<algorithm>
using namespace std;
int main()
{
list<int>a; //整型STL表类对象
list<int>::iterator ip; //list<int>元素的指针类型
int e; //list<int>元素的类型
for(int i = 0; i < 5; i++)
a.push_back(i); //在表a的末尾插入一个值为i的元素
a.push_front(1); //把1插到a的最前面,作为第一个元素
ip = a.begin(); //ip指向表a的第一个元素
advance(ip, 2); //ip指向表a的第三个元素
a.insert(ip, 9); //将数字9插在第三个元素之后
for(ip = a.begin(); ip != a.end(); ip++)
cout << *ip << ' ';
cout << endl << "a.size() = " << a.size(); //a的当前长度
ip = a.begin(); //ip指向表a的第一个元素********
advance(ip, 4); //ip指向表a的第五个元素
e = *ip; //将表a的第五个元素赋给e
cout << "e = " << e << endl;
a.erase(ip); //删除表中的第五个元素
a.remove(1); //删除a中所有值为1的元素
for(ip = a.begin(); ip != a.end(); ip++)
cout << *ip << ' ';
cout << endl << "a.empty() = " <<boolalpha << a.empty(); //判断a是否为空
cout << "a.front() = " << a.front() << "a.back() = " << a.back() <<endl;
a.sort(); //默认的升序排序
for(ip = a.begin(); ip != a.end(); ip++)
cout << *ip <<' ';
cout << endl;
a.pop_front(); //弹出表中的第一个元素
a.pop_back(); //弹出表中的最后一个元素
for(ip = a.begin(); ip != a.end(); ip++)
cout << *ip <<' ';
cout << endl;
a.clear(); //清空链表a
return 0;
}