您的位置:首页 > 编程语言 > C语言/C++

C++ STL 容器部分有关list 链表容器的基本操作

2018-03-22 14:14 495 查看
#include<iostream>

using namespace std;
#include "list"   //list模型的头文件

/*总结*/

//相当于一个双向链表
//1 list基本与其余容器模型差不多类似  注意一点就是不允许随机插入
//2 区间删除  注意!  如果是l1.erase(0,3);  就会删除 位置 0 1 2 但是位置3不会被删除  这就是一个左闭右开区间 【 )(这里0 3 代表迭代器的位置 )
//3  与其余容器相同也可以放置类对象,或者指针
//4 有一个remove函数比较特殊  表示删除链表中相同的元素
//5  链表的结点index序号是从0号位置开始的  ,例如在3号位置插入,则原来的三号位置会变成4号位置 4号变成5号位置
//list 链表模型的基本操作

void main71()
{
list<int> l1;

cout << "list的长度:" << l1.size() << endl;

for (int i = 0; i < 10; i++)
{
l1.push_back(i);  //list的尾插法
}
list<int>::iterator it = l1.begin();  //有关迭代器的操作
cout << "打印输出:";
while (it != l1.end())
{
cout << *it << " ";
it++;
}
cout << endl;
cout << "list的长度:" << l1.size() << endl;

//list不允许随机访问

it = l1.begin();   //重新定义迭代器
it++;
//it = it + 2;  //这里会报错,说明问题

it = l1.begin();   //重新定义迭代器  此时it指向0号位置
it++;   //将迭代器向后加一,指向1号位置
it++;   //此时应该指向2号位置
l1.insert(it, 100);  //代表在it位置处插入元素100 并且原it位置元素后移一位

cout << "打印插入后的链表:" ;

list<int>::iterator it1 = l1.begin();  //有关迭代器的操作
while (it1 != l1.end())
{
cout << *it1 << " ";
it1++;
}

}

//list链表的删除操作
void main72()
{
list<int> l1;

cout << "list的长度:" << l1.size() << endl;

for (int i = 0; i < 10; i++)
{
l1.push_back(i);  //list的尾插法
}
list<int>::iterator it = l1.begin();  //有关迭代器的操作
list<int>::iterator it1 = l1.begin();  //有关迭代器的操作
cout << "打印输出:";
while (it != l1.end())
{
cout << *it << " ";
it++;
}
cout << endl;

//区间删除  注意!  如果是l1.erase(0,3);  就会删除 位置 0 1 2 但是位置3不会被删除  这就是一个左闭右开区间 【 )(这里0 3 代表迭代器的位置 )
it = l1.begin();  //指向位置0
it1++;
it1++;
it1++;  //移向位置3出 0 1 2 3
l1.erase(it, it1);

cout << "打印输出删除之后1:";
it = l1.begin();

while (it != l1.end())
{
cout << *it << " ";
it++;
}

//指定位置删除

l1.erase(l1.begin());     //删除链表首个元素

cout << endl;
cout << "打印输出删除之后2:";
it = l1.begin();

while (it != l1.end())
{
cout << *it << " ";
it++;
}

//指定元素删除 例如删除所有的3
l1.insert( l1.begin(),3);
l1.insert(l1.begin(), 3);
l1.insert(l1.begin(), 3);
cout << endl;
cout << "链表的初始化:";
it = l1.begin();

while (it != l1.end())
{
cout << *it << " ";
it++;
}
cout << endl;

l1.remove(3);   //将链表中的元素3都删除

cout << "指定元素删除之后:";
it = l1.begin();

while (it != l1.end())
{
cout << *it << " ";
it++;
}

}

int main()
{
//main71();    //list的基本操作
main72();//list链表的删除操作
system("pause");
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: