标签:
#include "stdafx.h"
#include<iostream>
#include<string>
#include<vector>//vector向量容器
#include<deque>
#include<list>
#include<algorithm>
using namespace std;
/*
================================================= list介绍= ========================================================
list容器实现了双向链表的数据结构,数据元素是通过链表指针串连成逻辑意义上的线性表,这样,对链表的任何一位置的元素进行插入、删除以及查找都是极快的。
由于list对象的结点并不要求在一段连续的内存中,所以,对于迭代器,怎能通过++或--的操作将迭代器移动到后继/前驱结点出,而不能对迭代器进行+n或者-n操作。
*/
/******************************************************************/
int main(int argc, char* argv[])
{
/************************************** 1 ***************************************************/
/*1、创建list对象*/
list<int> l;//没有指定大小和初始化
list<int> l1(10);//长度为10
list<int> l2(3,0);//大小为10,初始化为0
list<int>::iterator it;
cout<<"初始化链表:"<<endl;
for(it=l2.begin();it!=l2.end();it++)
cout<<*it<<" ";
cout<<endl;
/*************************************** 2 **************************************************/
/* 2 插入元素*/
//尾部插入元素,会不断扩张队列
l2.push_back(4);
l2.push_back(3);
l2.push_back(8);
cout<<"尾部插入数据后链表为:"<<endl;
for(it=l2.begin();it!=l2.end();it++)
cout<<*it<<" ";
cout<<endl;
//头部插入元素,会扩张队列,与deque不同
l2.push_front(-1);
l2.push_front(-2);
cout<<"头部插入数据后链表为:"<<endl;
for(it=l2.begin();it!=l2.end();it++)
cout<<*it<<" ";
cout<<endl;
//中间插入元素,列表会扩张
l2.insert(l2.begin()++,-100);
it=l2.begin();
for(int i=0;i<4;i++)
it++;
l2.insert(it,7);
cout<<"中间插入数据后链表为:"<<endl;
for(it=l2.begin();it!=l2.end();it++)
cout<<*it<<" ";
cout<<endl;
/****************************************** 3 ***********************************************/
/*3、 删除元素*/
//尾部删除数据
l2.pop_back();
cout<<"尾部删除数据后链表为:"<<endl;
for(it=l2.begin();it!=l2.end();it++)
cout<<*it<<" ";
cout<<endl;
//从首部删除数据
l2.pop_front();
cout<<"头部删除数据后链表为:"<<endl;
for(it=l2.begin();it!=l2.end();it++)
cout<<*it<<" ";
cout<<endl;
//从中间删除数据
l2.erase(l2.begin()++);
it = l2.begin();
for(int i=0;i<3;i++)
it++;
l2.erase(it);
cout<<"中间删除数据后链表为:"<<endl;
for(it=l2.begin();it!=l2.end();it++)
cout<<*it<<" ";
cout<<endl;
//删除所有等于1的数
l2.remove(1);
cout<<"删除数据为1的元素后,链表为:"<<endl;
for(it=l2.begin();it!=l2.end();it++)
cout<<*it<<" ";
cout<<endl;
/****************************************** 4 ***********************************************/
//剔除连续重复的数据,只保留一个
l2.push_back(99);
l2.push_back(99);
l2.unique();
cout<<"剔除重复数据后的链表为:"<<endl;
for(it=l2.begin();it!=l2.end();it++)
cout<<*it<<" ";
cout<<endl;
/****************************************** 5 ***********************************************/
//元素查找,find如果找到则返回该元素的迭代器的位置;如果没有找到,则返回end()迭代器的位置
//使用find 函数,头文件需要包含<algorithm>
it = find(l2.begin(),l2.end(),-1);
if(it==l2.end())
cout<<"没有找到!"<<endl;
else
cout<<"找到"<<*it<<"了!"<<endl;
/******************************************* 6 **********************************************/
//有sort排序
l2.sort();
cout<<"排序后的链表为:"<<endl;
for(it=l2.begin();it!=l2.end();it++)
cout<<*it<<" ";
cout<<endl;
return 0;
}
//ABD##E##CF##G##
标签:
原文地址:http://www.cnblogs.com/Axel-uestc/p/5734247.html