网站后台改,西安高风险区全部降为低风险,wordpress调用表单,12306网站是学生做的STL初识#xff1a;从零开始的奇幻冒险
1 STL的诞生#xff1a;一场代码复用的革命 很久很久以前#xff0c;在编程的世界里#xff0c;开发者们每天都在重复造轮子。无论是数据结构还是算法#xff0c;每个人都得从头开始写#xff0c;仿佛在无尽的沙漠中寻找绿洲。直到…STL初识从零开始的奇幻冒险
1 STL的诞生一场代码复用的革命 很久很久以前在编程的世界里开发者们每天都在重复造轮子。无论是数据结构还是算法每个人都得从头开始写仿佛在无尽的沙漠中寻找绿洲。直到有一天C的面向对象和泛型编程思想横空出世带来了复用性的曙光。于是STLStandard Template Library标准模板库应运而生成为了拯救开发者于水深火热中的英雄。
2 STL基本概念容器、算法与迭代器的三角恋
STL全称标准模板库是C中的一把瑞士军刀。它主要由三大核心组成 容器Container用来存放数据的各种数据结构比如数组、链表、栈、队列等。 算法Algorithm用来处理数据的各种操作比如排序、查找、遍历等。 迭代器Iterator容器和算法之间的桥梁让它们能够无缝连接。
STL的代码几乎都是模板类或模板函数这意味着你可以用一套代码处理各种数据类型真正做到“一次编写到处运行”。
3 STL六大组件容器、算法、迭代器、仿函数、适配器、空间配置器
STL不仅仅是一个库它更像是一个精密的机器由六大组件构成 容器各种数据结构如vector、list、map等用来存放数据。 算法各种常用的操作如sort、find、copy等用来处理数据。 迭代器容器和算法之间的胶水让它们能够协同工作。 仿函数行为像函数的对象可以作为算法的策略。 适配器用来修饰容器、仿函数或迭代器的接口让它们更灵活。 空间配置器负责内存的分配与管理确保资源的高效利用。
这六大组件共同构成了STL的强大功能让开发者能够轻松应对各种复杂的编程任务。
4 容器、算法、迭代器STL的三剑客
容器你可以把它想象成一个魔法背包里面可以装各种类型的数据。STL提供了多种容器比如vector动态数组、list链表、map映射表等。这些容器分为两类 序列式容器元素按顺序排列比如vector和list。 关联式容器元素之间没有严格的物理顺序通常基于二叉树结构比如map和set。
算法算法就像是解决问题的魔法咒语。STL提供了大量的算法比如sort排序、find查找、for_each遍历等。算法分为两类 质变算法会改变容器中的元素比如copy和replace。 非质变算法不会改变容器中的元素比如find和count。
迭代器迭代器就像是魔法棒让你能够遍历容器中的元素而不需要知道容器的内部结构。每个容器都有自己的迭代器迭代器的种类也很多从简单的输入迭代器到功能强大的随机访问迭代器应有尽有。 每个容器都有自己专属的迭代器。迭代器使用非常类似于指针初学阶段我们可以先理解迭代器为指针。
迭代器种类 种类功能支持运算输入迭代器对数据的只读访问只读支持、、输出迭代器对数据的只写访问只写支持前向迭代器读写操作并能向前推进迭代器读写支持、、双向迭代器读写操作并能向前和向后操作读写支持、--随机访问迭代器读写操作可以以跳跃的方式访问任意数据功能最强的迭代器读写支持、--、[n]、-n、、、、 常用的容器中迭代器种类为双向迭代器和随机访问迭代器
5 容器算法迭代器初识从代码中感受STL的魅力
5.1 vector存放内置数据类型
vector是STL中最常用的容器之一你可以把它看作是一个动态数组。下面是一个简单的例子展示了如何向vector中插入数据并遍历它
容器 vector算法 for_each迭代器 vectorint::iterator
#includeiostream
using namespace std;
#includevector
#includealgorithm // 标准算法头文件// vector存放内置数据类型void myPrint(int val)
{cout val endl;
}void test01()
{// 创建了一个vector容器数组vectorint v;// 向容器中插入数据v.push_back(10);v.push_back(20);v.push_back(30);v.push_back(40);// 通过迭代器访问容器中的数据// vectorint::iterator itBegin v.begin(); //起始迭代器指向容器中第一个元素// vectorint::iterator itEnd v.end(); // 结束迭代器指向容器中最后一个元素的下一个位置// // 第一种遍历方式// while (itBegin ! itEnd)// {// cout*itBeginendl;// itBegin;// }// // 第二种遍历方式 就是将上面的进行改进优化// for(vectorint::iterator itv.begin();it ! v.end(); it)// {// cout*itendl;// }// 第三种遍历方式 利用STL提供遍历算法for_each(v.begin(), v.end(), myPrint);}int main()
{test01();system(pause);return 0;
}
5.2 Vector存放自定义数据类型
vector不仅可以存放内置数据类型还可以存放自定义的数据类型。比如我们可以创建一个Person类并将其对象存入vector中
#includeiostream
using namespace std;
#includevector
#includealgorithm // 标准算法头文件
#includestring// vector存放自定义数据类型
class Person
{
public:Person(string name, int age){this-m_Name name;this-m_Age age;}string m_Name;int m_Age;
};void test01()
{vectorPersonv;Person p1(孙悟空, 25);Person p2(猪八戒, 15);Person p3(钟无艳, 36);Person p4(兰陵王, 50);Person p5(安琪拉, 18);// 向容器中添加数据v.push_back(p1);v.push_back(p2);v.push_back(p3);v.push_back(p4);v.push_back(p5);// 遍历容器数据for(vectorPerson::iterator itv.begin(); it!v.end();it){// cout姓名 (*it).m_Name 年龄(*it).m_Ageendl;cout姓名 it-m_Name 年龄 it-m_Age endl;}}// 存放自定义数据类型 指针
void test02()
{vectorPerson*v;Person p1(孙悟空, 25);Person p2(猪八戒, 15);Person p3(钟无艳, 36);Person p4(兰陵王, 50);Person p5(安琪拉, 18);// 向容器中添加数据v.push_back(p1);v.push_back(p2);v.push_back(p3);v.push_back(p4);v.push_back(p5);// 遍历容器数据for(vectorPerson*::iterator itv.begin(); it!v.end();it){cout姓名 (*it)-m_Name 年龄(*it)-m_Ageendl;// cout姓名 it-m_Name 年龄 it-m_Age endl;}
}int main()
{// test01();test02();system(pause);return 0;
}
5.3 Vector容器嵌套容器
STL的容器还可以嵌套使用比如vector中可以存放另一个vector。下面是一个嵌套容器的例子
#includeiostream
using namespace std;
#includevector
#includealgorithm // 标准算法头文件
#includestring// vector容器嵌套容器
void test01()
{vector vectorintv;// 创建小容器vectorintv1;vectorintv2;vectorintv3;vectorintv4;// 向小容器中添加数据for(int i0;i4;i){v1.push_back(i1);v2.push_back(i2);v3.push_back(i3);v4.push_back(i4);}// 将小容器插入大容器中v.push_back(v1);v.push_back(v2);v.push_back(v3);v.push_back(v4);// 通过大容器把所有数据遍历一遍for(vectorvectorint::iterator itv.begin();it!v.end();it){// (*it) ---- 容器 vectorintfor(vectorint::iterator vit(*it).begin(); vit!(*it).end();vit){cout*vit ;}coutendl;}}int main()
{test01();system(pause);return 0;
}
结语STL的奇幻之旅才刚刚开始 STL就像是一个充满魔法的工具箱里面装满了各种强大的工具。通过容器、算法和迭代器的组合你可以轻松解决各种复杂的编程问题。这只是STL的入门随着你深入学习你会发现它的更多神奇之处。准备好踏上这段奇幻的编程之旅了吗STL的世界正等着你去探索