网站开发模板教程,html个人网站案例,好订单网服装加工接单,做网站要执照吗文章目录 第二章#xff1a;2.STL2.1 STL诞生2.2 STL基本概念2.3 STL六大组件2.4 STL容器、算法、迭代器2.5 容器算法迭代器2.5.1 vector存放内置数据类型2.5.2 vector存放自定义数据类型2.5.3 vector容器嵌套容器 第二章#xff1a;
2.STL
2.1 STL诞生
对了建立数据结构和… 文章目录 第二章2.STL2.1 STL诞生2.2 STL基本概念2.3 STL六大组件2.4 STL容器、算法、迭代器2.5 容器算法迭代器2.5.1 vector存放内置数据类型2.5.2 vector存放自定义数据类型2.5.3 vector容器嵌套容器 第二章
2.STL
2.1 STL诞生
对了建立数据结构和算法的一套标准诞生了STL
2.2 STL基本概念 STL(Standard Template Library)标准模板库 从广义分为容器(container)、算法(algorithm)、迭代器(iterator) 容器与算法之间通过迭代器进行连接
2.3 STL六大组件 容器各种数据结构如vector、list、deque、set、map等用来存放数据 算法各种常用算法如sort、find、copy、for_each等 迭代器容器与算法之间的桥梁 仿函数可作为算法的某种策略 适配器一种用来修饰容器或仿函数或迭代接口的东西 空间配置器负责空间的配置与管理
2.4 STL容器、算法、迭代器
容器置物
容器分为两种 序列式容器强调值之间的排序关系序列时容器中每个元素都有固定的位置 关联式容器二叉树结构各元素之间没有严格的物理上的顺序关系
算法问题解法
算法分为两种 质变算法运算过程中会更改区间内的元素内容如拷贝、替换、删除等操作 非质变算法运算过程中不会更改区间内的元素内容如查找、计数、寻找极值等操作
迭代器提供一种方法使其能够依序寻访某个容器中所含的各个元素而又无需暴露该容器的内部表示方法每个容器都有自己的专属迭代器。
迭代器种类
种类功能支持运算输入迭代器对数据只读访问只读支持 、、 输出迭代器对数据只写访问只写支持前向迭代器读写操作并能向前推进迭代器读写支持、、双向迭代器读写操作并能向前和向后操作读写支持–随机访问迭代器读写操作可跳跃的方式访问任意数据功能最强读写支持、–、[n]、-n、、、、
2.5 容器算法迭代器
2.5.1 vector存放内置数据类型
容器vector
算法for_each
迭代器
vectorint::iterator#include iostream
using namespace std;
#include vector //使用容器vector需包含该头文件
#include algorithm //使用for_each需包含该算法头文件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);v.push_back(50);//通过迭代器访问vectorint::iterator itBegin v.begin(); //起始迭代器指向容器第一个元素vectorint::iterator itEnd v.end(); //结束迭代器指向容器最后一个元素的下一个位置//方式1 遍历 - whilewhile (itBegin ! itEnd){cout *itBegin endl;itBegin;}//方式2 遍历 - forfor (vectorint::iterator it v.begin(); it ! v.end(); it){cout *it endl;}//方式3 遍历 - STL提供遍历算法for_each(v.begin(), v.end(), myPrint);}int main()
{test01();system(pause);return 0;
} 2.5.2 vector存放自定义数据类型
#include iostream
using namespace std;
#include string
#include vectorclass Student //自定义数据类型
{
public:Student(string name, int age){this-m_Name name;this-m_Age age;}string m_Name;int m_Age;
};void test01()
{vectorStudent v;Student s1(小明, 20);Student s2(小红, 21);Student s3(小李, 18);Student s4(小王, 19);Student s5(小刘, 22);v.push_back(s1);v.push_back(s2);v.push_back(s3);v.push_back(s4);v.push_back(s5);for (vectorStudent::iterator it v.begin(); it ! v.end(); it){//cout 姓名 (*it).m_Name 年龄 (*it).m_Age endl;cout 姓名 it-m_Name 年龄 it-m_Age endl;}
}void test02() //自定义数据类型 - 指针
{vectorStudent* v;Student s1(小明, 20);Student s2(小红, 21);Student s3(小李, 18);Student s4(小王, 19);Student s5(小刘, 22);v.push_back(s1);v.push_back(s2);v.push_back(s3);v.push_back(s4);v.push_back(s5);for (vectorStudent*::iterator it v.begin(); it ! v.end(); it){//cout 姓名 (*it).m_Name 年龄 (*it).m_Age endl;cout 姓名 (*it)-m_Name 年龄 (*it)-m_Age endl;}
}int main()
{test01();test02();system(pause);return 0;
}2.5.3 vector容器嵌套容器
#include iostream
using namespace std;
#include vectorvoid test01()
{vectorvectorint v; vectorint v1;vectorint v2;vectorint v3;vectorint v4;vectorint v5;for (int i 0; i 5; i){v1.push_back(i 1);v2.push_back(i 2);v3.push_back(i 3);v4.push_back(i 4);v5.push_back(i 5);}v.push_back(v1);v.push_back(v2);v.push_back(v3);v.push_back(v4);v.push_back(v5);for (vectorvectorint::iterator it v.begin(); it ! v.end(); it){for (vectorint::iterator itBegin (*it).begin(); itBegin ! (*it).end(); itBegin){cout *itBegin ;}cout endl;}}int main()
{test01();system(pause);return 0;
}