linux删除WordPress,商用营销型网站建设优化建站,泗阳网站设计,网站搭建平台多少钱【C】STL初识 文章目录 【C】STL初识前言一、STL基本概念二、STL六大组件简介三、STL三大组件四、初识STL总结 前言
本篇文章将讲到STL基本概念#xff0c;STL六大组件简介#xff0c;STL三大组件#xff0c;初识STL。 一、STL基本概念 STL(Standard Template Library,标准…【C】STL初识 文章目录 【C】STL初识前言一、STL基本概念二、STL六大组件简介三、STL三大组件四、初识STL总结 前言
本篇文章将讲到STL基本概念STL六大组件简介STL三大组件初识STL。 一、STL基本概念 STL(Standard Template Library,标准模板库) STL 从广义上分为: 容器(container) 算法(algorithm) 迭代器(iterator),容器和算法之间通过迭代器进行无缝连接。STL 几乎所有的代码都采用了模板类或者模板函数这相比传统的由函数和类组成的库来说提供了更好的代码重用机会。 二、STL六大组件简介 STL提供了六大组件彼此之间可以组合套用这六大组件分别是:容器、算法、迭代器、仿函数、适配器配接器、空间配置器。 容器各种数据结构如vector、list、deque、set、map等,用来存放数据从实现角度来看STL容器是一种class template。算法各种常用的算法如sort、find、copy、for_each。从实现的角度来看STL算法是一种function tempalte.迭代器扮演了容器与算法之间的胶合剂共有五种类型从实现角度来看迭代器是一种将operator* , operator- , operator,operator–等指针相关操作予以重载的class template. 所有STL容器都附带有自己专属的迭代器只有容器的设计者才知道如何遍历自己的元素。原生指针(native pointer)也是一种迭代器。仿函数行为类似函数可作为算法的某种策略。从实现角度来看仿函数是一种重载了operator()的class 或者class template适配器一种用来修饰容器或者仿函数或迭代器接口的东西。空间配置器负责空间的配置与管理。从实现角度看配置器是一个实现了动态空间配置、空间管理、空间释放的class tempalte.
STL六大组件的交互关系容器通过空间配置器取得数据存储空间算法通过迭代器存储容器中的内容仿函数可以协助算法完成不同的策略的变化适配器可以修饰仿函数。
STL优点STL 具有高可重用性高性能高移植性跨平台的优点。 三、STL三大组件
容器 常用的数据结构数组(array),链表(list),tree(树)栈(stack),队列(queue),集合(set),映射表(map),根据数据在容器中的排列特性这些数据分为序列式容器和关联式容器两种 序列式容器强调值的排序序列式容器中的每个元素均有固定的位置除非用删除或插入的操作改变这个位置。Vector容器、Deque容器、List容器等。 关联式容器是非线性的树结构更准确的说是二叉树结构。各元素之间没有严格的物理上的顺序关系也就是说元素在容器中并没有保存元素置入容器时的逻辑顺序。关联式容器另一个显著特点是在值中选择一个值作为关键字key这个关键字对值起到索引的作用方便查找。Set/multiset容器 Map/multimap容器 算法 算法分为:质变算法和非质变算法。 质变算法是指运算过程中会更改区间内的元素的内容。例如拷贝替换删除等等 非质变算法是指运算过程中不会更改区间内的元素内容例如查找、计数、遍历、寻找极值等等 迭代器 四、初识STL vector容器 vectorv vector::iterator itBegin v.begin(); //v.begin() 起始迭代器指向容器中第一个数据 vector::iterator itEnd v.end(); //v.end()结束迭代器指向的是容器中最后一个元素的下一个位置 利用算法遍历容器 for_each(v.begin(),v.end() , myPrint ) 头文件 algorithm 容器中存放自定义数据类型 容器中存放自定义数据类型指针 容器嵌套容器 #define _CRT_SECURE_NO_WARNINGS 1
#includeiostream
using namespace std;
#includevector
#includealgorithm
#includestring//原生指针也是迭代器
void test01()
{int arr[5] { 1, 2,3 ,4,5 };int* p arr;for (int i 0; i 5; i){//cout arr[i] endl;cout *(p) endl;}
}void myPrint(int val)
{cout val endl;
}void test02()
{vectorint v; //创建一个victor容器容器中存放的元素是int 类型//插入元素v.push_back(10);v.push_back(20);v.push_back(30);v.push_back(40);//遍历元素vectorint::iterator itBegin v.begin(); //v.begin() 起始迭代器指向容器中第一个数据vectorint::iterator itEnd v.end(); //v.end()结束迭代器指向的是容器中最后一个元素的下一个位置//第一种遍历//while (itBegin ! itEnd)//{// cout *itBegin endl;// itBegin;//}//第二种遍历//for (vectorint::iterator it v.begin(); it ! v.end(); it)//{// cout *it endl;//}//第三种遍历for_each(itBegin, itEnd, myPrint);for_each(v.begin(), v.end(), myPrint);
}//自定义数据类型
class Person
{
public:Person(string name, int age){this-m_name name;this-m_age age;}string m_name;int m_age;
};void test03()
{vectorPerson v;Person p1(aaa, 10);Person p2(bbb, 20);Person p3(ccc, 30);Person p4(ddd, 40);v.push_back(p1);v.push_back(p2);v.push_back(p3);v.push_back(p4);//每个容器都有自己的专属迭代器for (vectorPerson::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 test04()
{vectorPerson* v;Person p1(aaa, 10);Person p2(bbb, 20);Person p3(ccc, 30);Person p4(ddd, 40);v.push_back(p1);v.push_back(p2);v.push_back(p3);v.push_back(p4);for (vectorPerson*::iterator it v.begin(); it ! v.end(); it){// * it ---- Person*cout 姓名: (*it)-m_name 年龄: (*it)-m_age endl;}
}//容器嵌套容器
void test05()
{vectorvectorintv;vectorintv1;vectorintv2;vectorintv3;for (int i 0; i 5; i){v1.push_back(i);v2.push_back(i 10);v3.push_back(i 100);}v.push_back(v1);v.push_back(v2);v.push_back(v3);for (vectorvectorint::iterator it v.begin(); it ! v.end(); it){for (vectorint::iterator vit (*it).begin(); vit ! (*it).end(); vit){cout *vit ;}cout endl;}}int main() {//test01();//test02();//test03();//test04();test05();system(pause);return EXIT_SUCCESS;
}总结 STL六大组件 容器、算法、迭代器、仿函数、适配器、空间配置器 STL优点 内建在C编译器中不需要安装额外内容 不需要了解具体实现内容只要熟练运用即可 高复用可移植高性能 容器划分 序列式容器 关联式容器 有个key起到索引作用 算法 质变算法 非质变算法 STL初识 vector容器 vectorv vector::iterator itBegin v.begin(); //v.begin() 起始迭代器指向容器中第一个数据 vector::iterator itEnd v.end(); //v.end()结束迭代器指向的是容器中最后一个元素的下一个位置 利用算法遍历容器 for_each(v.begin(),v.end() , myPrint ) 头文件 algorithm 容器中存放自定义数据类型 容器中存放自定义数据类型指针 容器嵌套容器
文章转载自: http://www.morning.qnftc.cn.gov.cn.qnftc.cn http://www.morning.srnhk.cn.gov.cn.srnhk.cn http://www.morning.qwhbk.cn.gov.cn.qwhbk.cn http://www.morning.zcfsq.cn.gov.cn.zcfsq.cn http://www.morning.gqfjb.cn.gov.cn.gqfjb.cn http://www.morning.nuejun.com.gov.cn.nuejun.com http://www.morning.qgmwt.cn.gov.cn.qgmwt.cn http://www.morning.lsmgl.cn.gov.cn.lsmgl.cn http://www.morning.wmdqc.com.gov.cn.wmdqc.com http://www.morning.hgsylxs.com.gov.cn.hgsylxs.com http://www.morning.mswkd.cn.gov.cn.mswkd.cn http://www.morning.yqkxr.cn.gov.cn.yqkxr.cn http://www.morning.phwmj.cn.gov.cn.phwmj.cn http://www.morning.ssqwr.cn.gov.cn.ssqwr.cn http://www.morning.drwpn.cn.gov.cn.drwpn.cn http://www.morning.gsksm.cn.gov.cn.gsksm.cn http://www.morning.qbdqc.cn.gov.cn.qbdqc.cn http://www.morning.plhyc.cn.gov.cn.plhyc.cn http://www.morning.llcsd.cn.gov.cn.llcsd.cn http://www.morning.hfxks.cn.gov.cn.hfxks.cn http://www.morning.bhpsz.cn.gov.cn.bhpsz.cn http://www.morning.lqchz.cn.gov.cn.lqchz.cn http://www.morning.sphft.cn.gov.cn.sphft.cn http://www.morning.ndtzy.cn.gov.cn.ndtzy.cn http://www.morning.nfbkp.cn.gov.cn.nfbkp.cn http://www.morning.sjgsh.cn.gov.cn.sjgsh.cn http://www.morning.qjrjs.cn.gov.cn.qjrjs.cn http://www.morning.tkryt.cn.gov.cn.tkryt.cn http://www.morning.fdzzh.cn.gov.cn.fdzzh.cn http://www.morning.smrkf.cn.gov.cn.smrkf.cn http://www.morning.pcxgj.cn.gov.cn.pcxgj.cn http://www.morning.qkkmd.cn.gov.cn.qkkmd.cn http://www.morning.fylqz.cn.gov.cn.fylqz.cn http://www.morning.bwttp.cn.gov.cn.bwttp.cn http://www.morning.hlxpz.cn.gov.cn.hlxpz.cn http://www.morning.djgrg.cn.gov.cn.djgrg.cn http://www.morning.jnzfs.cn.gov.cn.jnzfs.cn http://www.morning.skmpj.cn.gov.cn.skmpj.cn http://www.morning.swkzr.cn.gov.cn.swkzr.cn http://www.morning.hhpbj.cn.gov.cn.hhpbj.cn http://www.morning.hhkzl.cn.gov.cn.hhkzl.cn http://www.morning.uytae.cn.gov.cn.uytae.cn http://www.morning.qlck.cn.gov.cn.qlck.cn http://www.morning.xqtqm.cn.gov.cn.xqtqm.cn http://www.morning.rdxnt.cn.gov.cn.rdxnt.cn http://www.morning.fhbhr.cn.gov.cn.fhbhr.cn http://www.morning.psxwc.cn.gov.cn.psxwc.cn http://www.morning.wpspf.cn.gov.cn.wpspf.cn http://www.morning.mwns.cn.gov.cn.mwns.cn http://www.morning.qrpx.cn.gov.cn.qrpx.cn http://www.morning.ctlbf.cn.gov.cn.ctlbf.cn http://www.morning.tfqfm.cn.gov.cn.tfqfm.cn http://www.morning.sbkb.cn.gov.cn.sbkb.cn http://www.morning.kpnpd.cn.gov.cn.kpnpd.cn http://www.morning.sqhlx.cn.gov.cn.sqhlx.cn http://www.morning.qfnrx.cn.gov.cn.qfnrx.cn http://www.morning.qxljc.cn.gov.cn.qxljc.cn http://www.morning.hwlk.cn.gov.cn.hwlk.cn http://www.morning.trhrk.cn.gov.cn.trhrk.cn http://www.morning.pprxs.cn.gov.cn.pprxs.cn http://www.morning.dphmj.cn.gov.cn.dphmj.cn http://www.morning.glnmm.cn.gov.cn.glnmm.cn http://www.morning.mfzyn.cn.gov.cn.mfzyn.cn http://www.morning.rbnj.cn.gov.cn.rbnj.cn http://www.morning.gqtzb.cn.gov.cn.gqtzb.cn http://www.morning.zmtrk.cn.gov.cn.zmtrk.cn http://www.morning.zybdj.cn.gov.cn.zybdj.cn http://www.morning.rknjx.cn.gov.cn.rknjx.cn http://www.morning.nlysd.cn.gov.cn.nlysd.cn http://www.morning.chmkt.cn.gov.cn.chmkt.cn http://www.morning.ygrkg.cn.gov.cn.ygrkg.cn http://www.morning.zyrp.cn.gov.cn.zyrp.cn http://www.morning.mfsjn.cn.gov.cn.mfsjn.cn http://www.morning.rmtxp.cn.gov.cn.rmtxp.cn http://www.morning.yrxcn.cn.gov.cn.yrxcn.cn http://www.morning.ykgkh.cn.gov.cn.ykgkh.cn http://www.morning.qsfys.cn.gov.cn.qsfys.cn http://www.morning.dzqr.cn.gov.cn.dzqr.cn http://www.morning.rcqyk.cn.gov.cn.rcqyk.cn http://www.morning.lwtfx.cn.gov.cn.lwtfx.cn