赞
踩
概念:Queue是一种先进先出(First In First Out,FIFO)的数据结构,它有两个出口
功能描述:栈容器常用的对外接口
构造函数:
赋值操作:
数据存取:
大小操作:
代码示例:
- #include <queue>
- #include <string>
- class Person{
- public:
- Person(string name, int age){
- this->m_Name = name;
- this->m_Age = age;
- }
-
- string m_Name;
- int m_Age;
- };
-
- void test01() {
-
- //创建队列
- queue<Person> q;
-
- //准备数据
- Person p1("唐僧", 30);
- Person p2("孙悟空", 1000);
- Person p3("猪八戒", 900);
- Person p4("沙僧", 800);
-
- //向队列中添加元素 入队操作
- q.push(p1);
- q.push(p2);
- q.push(p3);
- q.push(p4);
-
- //队列不提供迭代器,更不支持随机访问
- while (!q.empty()) {
- //输出队头元素
- cout << "队头元素-- 姓名: " << q.front().m_Name
- << " 年龄: "<< q.front().m_Age << endl;
-
- cout << "队尾元素-- 姓名: " << q.back().m_Name
- << " 年龄: " << q.back().m_Age << endl;
-
- cout << endl;
- //弹出队头元素
- q.pop();
- }
-
- cout << "队列大小为:" << q.size() << endl;
- }
-
- int main() {
- test01();
- system("pause");
- return 0;
- }
总结:
功能:将数据进行链式存储
链表(list)是一种物理存储单元上非连续的存储结构,数据元素的逻辑顺序是通过链表中的指针链接实现的
链表的组成:链表由一系列结点组成
结点的组成:一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针域
STL中的链表是一个双向循环链表,由于链表的存储方式并不是连续的内存空间,因此链表list中的迭代器只支持前移和后移,属于双向迭代器
list的优点:
list的缺点:
List有一个重要的性质,插入操作和删除操作都不会造成原有list迭代器的失效,这在vector是不成立的。
总结:STL中List和vector是两个最常被使用的容器,各有优缺点
功能描述:创建list容器
函数原型:
代码示例:
- #include <list>
-
- void printList(const list<int>& L) {
-
- for (list<int>::const_iterator it = L.begin(); it != L.end(); it++) {
- cout << *it << " ";
- }
- cout << endl;
- }
-
- void test01(){
- list<int>L1;
- L1.push_back(10);
- L1.push_back(20);
- L1.push_back(30);
- L1.push_back(40);
-
- printList(L1);
-
- list<int>L2(L1.begin(),L1.end());
- printList(L2);
-
- list<int>L3(L2);
- printList(L3);
-
- list<int>L4(10, 1000);
- printList(L4);
- }
-
- int main() {
- test01();
- system("pause");
- return 0;
- }
总结:list构造方式同其他几个STL常用容器,熟练掌握即可
功能描述:给list容器进行赋值,以及交换list容器
函数原型:
- #include <list>
-
- void printList(const list<int>& L) {
-
- for (list<int>::const_iterator it = L.begin(); it != L.end(); it++) {
- cout << *it << " ";
- }
- cout << endl;
- }
-
- //赋值和交换
- void test01(){
- list<int>L1;
- L1.push_back(10);
- L1.push_back(20);
- L1.push_back(30);
- L1.push_back(40);
- printList(L1);
-
- //赋值
- list<int>L2;
- L2 = L1;
- printList(L2);
-
- list<int>L3;
- L3.assign(L2.begin(), L2.end());
- printList(L3);
-
- list<int>L4;
- L4.assign(10, 100);
- printList(L4);
-
- }
-
- //交换
- void test02(){
-
- list<int>L1;
- L1.push_back(10);
- L1.push_back(20);
- L1.push_back(30);
- L1.push_back(40);
-
- list<int>L2;
- L2.assign(10, 100);
-
- cout << "交换前: " << endl;
- printList(L1);
- printList(L2);
-
- cout << endl;
-
- L1.swap(L2);
-
- cout << "交换后: " << endl;
- printList(L1);
- printList(L2);
-
- }
-
- int main() {
- //test01();
- test02();
- system("pause");
- return 0;
- }
总结:list赋值和交换操作能够灵活运用即可
功能描述:对list容器的大小进行操作
函数原型:
代码示例:
- #include <list>
-
- void printList(const list<int>& L) {
-
- for (list<int>::const_iterator it = L.begin(); it != L.end(); it++) {
- cout << *it << " ";
- }
- cout << endl;
- }
-
- //大小操作
- void test01(){
- list<int>L1;
- L1.push_back(10);
- L1.push_back(20);
- L1.push_back(30);
- L1.push_back(40);
-
- if (L1.empty()){
- cout << "L1为空" << endl;
- }
- else
- {
- cout << "L1不为空" << endl;
- cout << "L1的大小为: " << L1.size() << endl;
- }
-
- //重新指定大小
- L1.resize(10);
- printList(L1);
-
- L1.resize(2);
- printList(L1);
- }
-
- int main() {
-
- test01();
-
- system("pause");
-
- return 0;
- }
总结:
功能描述:对list容器进行数据的插入和删除
函数原型:
- #include <list>
-
- void printList(const list<int>& L) {
-
- for (list<int>::const_iterator it = L.begin(); it != L.end(); it++) {
- cout << *it << " ";
- }
- cout << endl;
- }
-
- //插入和删除
- void test01(){
- list<int> L;
- //尾插
- L.push_back(10);
- L.push_back(20);
- L.push_back(30);
- //头插
- L.push_front(100);
- L.push_front(200);
- L.push_front(300);
-
- printList(L);
-
- //尾删
- L.pop_back();
- printList(L);
-
- //头删
- L.pop_front();
- printList(L);
-
- //插入
- list<int>::iterator it = L.begin();
- L.insert(++it, 1000);
- printList(L);
-
- //删除
- it = L.begin();
- L.erase(++it);
- printList(L);
-
- //移除
- L.push_back(10000);
- L.push_back(10000);
- L.push_back(10000);
- printList(L);
- L.remove(10000);
- printList(L);
-
- //清空
- L.clear();
- printList(L);
- }
-
- int main() {
- test01();
- system("pause");
- return 0;
- }
总结:
功能描述:对list容器中数据进行存取
函数原型:
代码示例:
- #include <list>
-
- //数据存取
- void test01(){
- list<int>L1;
- L1.push_back(10);
- L1.push_back(20);
- L1.push_back(30);
- L1.push_back(40);
-
-
- //cout << L1.at(0) << endl;//错误 不支持at访问数据
- //cout << L1[0] << endl; //错误 不支持[]方式访问数据
- cout << "第一个元素为: " << L1.front() << endl;
- cout << "最后一个元素为: " << L1.back() << endl;
-
- //list容器的迭代器是双向迭代器,不支持随机访问
- list<int>::iterator it = L1.begin();
- //it = it + 1;//错误,不可以跳跃访问,即使是+1
- }
-
- int main() {
- test01();
- system("pause");
- return 0;
- }
总结:
功能描述:将容器中的元素反转,以及将容器中的数据进行排序
函数原型:
- void printList(const list<int>& L) {
-
- for (list<int>::const_iterator it = L.begin(); it != L.end(); it++) {
- cout << *it << " ";
- }
- cout << endl;
- }
-
- bool myCompare(int val1 , int val2){
- return val1 > val2;
- }
-
- //反转和排序
- void test01(){
- list<int> L;
- L.push_back(90);
- L.push_back(30);
- L.push_back(20);
- L.push_back(70);
- printList(L);
-
- //反转容器的元素
- L.reverse();
- printList(L);
-
- //排序
- L.sort(); //默认的排序规则 从小到大
- printList(L);
-
- L.sort(myCompare); //指定规则,从大到小
- printList(L);
- }
-
- int main() {
- test01();
- system("pause");
- return 0;
- }
总结:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。