level 6
西安恩仪联教育
楼主
STL库编程:
一、stl简介
二、list容器的应用
一、stl简介
1、概念
(1)是一种标准模板库,是c++标准库的重要组成部分。
(2)由一系列泛型算法和数据结构组成的通用型库,具有广泛的特点,不依赖于某种具体的数据类型。
(3)体现了软件代码的可重用性,又保证代码有相当高的执行效率
(4)模板类、模板函数组成
泛型设计的目标:设计出与数据结构无关的算法,实现代码重用
2、组成
Stl主要包括:容器、算法、迭代器、函数对象、内存分配器和配接器
容器:一种重要组成部分,stl定义和支持的数据结构组成的模板类
Vector list queue set map mutimap stack hash_set
迭代器:stl通过迭代器可以定位和操纵容器,从而实现算法和容器的关联。
类似于c中的指针,除stack queue 与priority_queue外,其它容器都有
自己的迭代器。
算法:模板函数提供,用来解决特定的问题,对具有泛型数据结构的容器进行数
据处理,提供了许多算法,包括排序、查找、搜索、修改、数值运算。
函数对象:将函数封装在一个对象中,使得它可以作为参数传递给合适的stl算
法。
内存分配器:负责内存空间的配置与管理,实现内存空间的动态配置、管理、释
放的模板类。
适配器:一种修改容器、函数或迭代器接口的stl组件。
STL被linux的c++编译器所采用,在Linux下,可以直接编辑编译stl的程序
优点:
良好的跨平台性、高效性、重用性 可读性
二、 List容器的介绍
概述:
是一种双链表的泛化器
与vector 和deque相比,不能利用下标随机访问链表中的数据元素
可以通过指针很容易向链表中插入或删除数据
有自己的迭代器:iterator,const_iterator
Reverse_iterator,const_reverse_iterator
迭代器用list<T>::iterator来声明,才能通过迭代器对容器进行操作
List.h中细定义了list模板类,
通过#include<list>将list容器包含进来
应用:创建对象、数据添加、数据删除、元素遍历、list容器间的操作
创建对象:提供了以下几种构造函数
List<T>()
List<T>(size_type n)
List<T>(size_type n,const T &value)
List<T>(const list &)
List<T>(inputIterator first,inputIterator last)
数据添加:
Void push_back(const T&)
Void push_front(const T &)
Iterator insert(iterator pos,const T &x)//pos前插入一个值为x的元素
代码展示1:利用list管理整型数据,创建对象和插入元素
#include <iostream>
#include <list>
using namespace std;
int main()
{
int i;
list<int> obj;
list<int>::iterator j;
for(i = 0;i < 10;i++)
{
obj.push_back(i+1);
}
obj.push_front(0);
j = obj.begin();
for(i = 0;i < 7;i++)
{
j++;
}
cout << *j<<endl;
obj.insert(j,11);
for(j = obj.begin();j != obj.end();j++)
cout << (*j)<<" ";
cout << endl;
return 1;
}
数据删除:
Void pop_front()
Void pop_back()
Iterator erase(iterator pos)
Iterator erase(iterator first,iterator last)
Void clear()
Void remove(const T &value)删除所有值为value的元素
Void unique():删除所有连续重复的元素
代码展示2:元素删除方法使用
#include <iostream>
#include <list>
using namespace std;
int main()
{
int i;
list<int> obj;
list<int>::iterator j,k;
for(i = 0;i < 10;i++)
{
obj.push_back(i + 1);
obj.push_back(i + 1);
}
for(j = obj.begin();j != obj.end();j++)
{
cout << (*j)<<" ";
}
cout <<endl;
obj.pop_front();
obj.pop_back();
j = obj.begin();
k = j;
for(i = 0;i < 5;i++)
{
k++;
}
obj.erase(j,k);
for(j = obj.begin();j != obj.end();j++)
{
cout << (*j)<<" ";
}
cout <<endl;
obj.unique();
for(j = obj.begin();j != obj.end();j++)
{
cout << (*j)<<" ";
}
cout <<endl;
obj.clear();
for(j = obj.begin();j != obj.end();j++)
{
cout << (*j)<<" ";
}
cout <<endl;
return 0;
}
元素遍历
Begin() end() rbegin() rend()获取指向头或尾节点的迭代器
迭代器通过++和--操作,遍历和读取容器中的元素
代码展示3、迭代器的使用方法:
#include <iostream>
#include <list>
using namespace std;
int main()
{
int i = 0;
list<int> obj;
list<int> :: iterator ri;
list<int> :: reverse_iterator rj;
for(i = 0;i < 10;i++)
{
obj.push_back(i + 1);
}
for(ri = obj.begin();ri != obj.end();ri++)
{
cout << (*ri)<<" ";
}
cout <<endl;
for(rj = obj.rbegin();rj != obj.rend();rj++)
{
cout << (*rj)<<" ";
}
cout <<endl;
return 0;
}
List容器间的操作
Void swap(list &x)
Void splice(iterator pos,list &x)//pos前插入链表x,并将x清空
Void splice(iterator pos,list &x,iterator i)
链表x中i所指的元素插入链表pos所指位置之前,并从x中删除i所指的元素
Void splice(iterator pos,list &x,iterator first,iterator last)
将链表x中(first,last)间的元素插入到pos之间,并从链表x中删除它们
Void merge(list &x)
X与当前链表归并
代码展示4、
#include <iostream>
#include <list>
using namespace std;
int main()
{
list<int> l1;
list<int> l2;
list<int>::iterator ri;
for(int i = 0; i < 10;i++)
{
l1.push_back(i + 1);
}
l2.push_back(11);
l2.push_back(3);
l2.push_back(13);
l1.swap(l2);
for(ri = l1.begin();ri != l1.end();ri++)
{
cout << *ri << " ";
}
cout <<endl;
l1.merge(l2);
for(ri = l1.begin();ri != l1.end();ri++)
{
cout << *ri << " ";
}
cout <<endl;
}
元素排序
Void sort():升序排序
Void reverse():链表中元素反序排列
代码展示5:
#include <iostream>
#include <list>
using namespace std;
int main()
{
list<int> l;
list<int>::iterator ri;
l.push_back(11);
l.push_back(2);
l.push_back(25);
l.push_back(3);
l.sort();
for(ri = l.begin();ri != l.end();ri++)
{
cout << (*ri) <<" ";
}
cout <<endl;
l.reverse();
for(ri = l.begin();ri != l.end();ri++)
{
cout << (*ri) <<" ";
}
cout <<endl;
return 0;
}
2025年12月24日 06点12分
1
一、stl简介
二、list容器的应用
一、stl简介
1、概念
(1)是一种标准模板库,是c++标准库的重要组成部分。
(2)由一系列泛型算法和数据结构组成的通用型库,具有广泛的特点,不依赖于某种具体的数据类型。
(3)体现了软件代码的可重用性,又保证代码有相当高的执行效率
(4)模板类、模板函数组成
泛型设计的目标:设计出与数据结构无关的算法,实现代码重用
2、组成
Stl主要包括:容器、算法、迭代器、函数对象、内存分配器和配接器
容器:一种重要组成部分,stl定义和支持的数据结构组成的模板类
Vector list queue set map mutimap stack hash_set
迭代器:stl通过迭代器可以定位和操纵容器,从而实现算法和容器的关联。
类似于c中的指针,除stack queue 与priority_queue外,其它容器都有
自己的迭代器。
算法:模板函数提供,用来解决特定的问题,对具有泛型数据结构的容器进行数
据处理,提供了许多算法,包括排序、查找、搜索、修改、数值运算。
函数对象:将函数封装在一个对象中,使得它可以作为参数传递给合适的stl算
法。
内存分配器:负责内存空间的配置与管理,实现内存空间的动态配置、管理、释
放的模板类。
适配器:一种修改容器、函数或迭代器接口的stl组件。
STL被linux的c++编译器所采用,在Linux下,可以直接编辑编译stl的程序
优点:
良好的跨平台性、高效性、重用性 可读性
二、 List容器的介绍
概述:
是一种双链表的泛化器
与vector 和deque相比,不能利用下标随机访问链表中的数据元素
可以通过指针很容易向链表中插入或删除数据
有自己的迭代器:iterator,const_iterator
Reverse_iterator,const_reverse_iterator
迭代器用list<T>::iterator来声明,才能通过迭代器对容器进行操作
List.h中细定义了list模板类,
通过#include<list>将list容器包含进来
应用:创建对象、数据添加、数据删除、元素遍历、list容器间的操作
创建对象:提供了以下几种构造函数
List<T>()
List<T>(size_type n)
List<T>(size_type n,const T &value)
List<T>(const list &)
List<T>(inputIterator first,inputIterator last)
数据添加:
Void push_back(const T&)
Void push_front(const T &)
Iterator insert(iterator pos,const T &x)//pos前插入一个值为x的元素
代码展示1:利用list管理整型数据,创建对象和插入元素
#include <iostream>
#include <list>
using namespace std;
int main()
{
int i;
list<int> obj;
list<int>::iterator j;
for(i = 0;i < 10;i++)
{
obj.push_back(i+1);
}
obj.push_front(0);
j = obj.begin();
for(i = 0;i < 7;i++)
{
j++;
}
cout << *j<<endl;
obj.insert(j,11);
for(j = obj.begin();j != obj.end();j++)
cout << (*j)<<" ";
cout << endl;
return 1;
}
数据删除:
Void pop_front()
Void pop_back()
Iterator erase(iterator pos)
Iterator erase(iterator first,iterator last)
Void clear()
Void remove(const T &value)删除所有值为value的元素
Void unique():删除所有连续重复的元素
代码展示2:元素删除方法使用
#include <iostream>
#include <list>
using namespace std;
int main()
{
int i;
list<int> obj;
list<int>::iterator j,k;
for(i = 0;i < 10;i++)
{
obj.push_back(i + 1);
obj.push_back(i + 1);
}
for(j = obj.begin();j != obj.end();j++)
{
cout << (*j)<<" ";
}
cout <<endl;
obj.pop_front();
obj.pop_back();
j = obj.begin();
k = j;
for(i = 0;i < 5;i++)
{
k++;
}
obj.erase(j,k);
for(j = obj.begin();j != obj.end();j++)
{
cout << (*j)<<" ";
}
cout <<endl;
obj.unique();
for(j = obj.begin();j != obj.end();j++)
{
cout << (*j)<<" ";
}
cout <<endl;
obj.clear();
for(j = obj.begin();j != obj.end();j++)
{
cout << (*j)<<" ";
}
cout <<endl;
return 0;
}
元素遍历
Begin() end() rbegin() rend()获取指向头或尾节点的迭代器
迭代器通过++和--操作,遍历和读取容器中的元素
代码展示3、迭代器的使用方法:
#include <iostream>
#include <list>
using namespace std;
int main()
{
int i = 0;
list<int> obj;
list<int> :: iterator ri;
list<int> :: reverse_iterator rj;
for(i = 0;i < 10;i++)
{
obj.push_back(i + 1);
}
for(ri = obj.begin();ri != obj.end();ri++)
{
cout << (*ri)<<" ";
}
cout <<endl;
for(rj = obj.rbegin();rj != obj.rend();rj++)
{
cout << (*rj)<<" ";
}
cout <<endl;
return 0;
}
List容器间的操作
Void swap(list &x)
Void splice(iterator pos,list &x)//pos前插入链表x,并将x清空
Void splice(iterator pos,list &x,iterator i)
链表x中i所指的元素插入链表pos所指位置之前,并从x中删除i所指的元素
Void splice(iterator pos,list &x,iterator first,iterator last)
将链表x中(first,last)间的元素插入到pos之间,并从链表x中删除它们
Void merge(list &x)
X与当前链表归并
代码展示4、
#include <iostream>
#include <list>
using namespace std;
int main()
{
list<int> l1;
list<int> l2;
list<int>::iterator ri;
for(int i = 0; i < 10;i++)
{
l1.push_back(i + 1);
}
l2.push_back(11);
l2.push_back(3);
l2.push_back(13);
l1.swap(l2);
for(ri = l1.begin();ri != l1.end();ri++)
{
cout << *ri << " ";
}
cout <<endl;
l1.merge(l2);
for(ri = l1.begin();ri != l1.end();ri++)
{
cout << *ri << " ";
}
cout <<endl;
}
元素排序
Void sort():升序排序
Void reverse():链表中元素反序排列
代码展示5:
#include <iostream>
#include <list>
using namespace std;
int main()
{
list<int> l;
list<int>::iterator ri;
l.push_back(11);
l.push_back(2);
l.push_back(25);
l.push_back(3);
l.sort();
for(ri = l.begin();ri != l.end();ri++)
{
cout << (*ri) <<" ";
}
cout <<endl;
l.reverse();
for(ri = l.begin();ri != l.end();ri++)
{
cout << (*ri) <<" ";
}
cout <<endl;
return 0;
}