14-1C++STL的初始

(一)STL的初识

(1)STL的基本概念:1.STL(Standard Template Library.标准模板库)

2.STL从广义上分为:容器(container)算法(algorithm)迭代器(iterator)

3.容器与算法之间通过迭代器进行连接

4.STL几乎所有的代码采用了模板或者模板函数

(2)STL六大组件

STL六大组件:容器、算法、迭代器、仿函数、适配器(配接器)、空间配置器

1.容器:各种数据结构,如vector、list、deque、set、map等,用来存放数据

2.算法:各种常用的算法,如sort、find、copy、for_each...

3.迭代器:扮演了容器与算法之间的胶合剂

4.仿函数:行为类似函数,可作为算法的某种策略

5.适配器:一种用来修饰容器或者仿函数或迭代器接口的东西

6.空间配置器:负责空间的配置与管理

(3)STL容器广泛的数据实现

常用的数据结构:数组、链表、树、栈、队列、集合、映射表...

序列式容器:强调值的排序,序列式容器中的每个元素均有固定的位置

关联式容器:二叉树结构,各元素之间没有严格的物理顺序关系

(4)算法:问题之解法也

有限的步骤,解决逻辑或数学上的问题,这一门学科我们叫做算法(Algorithms)

算法分为:质变算法和非质变算法

质变算法:指运算过程中会更改区间内的元素的内容,例如拷贝,替换,删除等等

非质变算法:是指运算过程中不会更改区间内的元素内容,例如查找、计数、遍历、寻找极值等等

(5)迭代器:容器和算法之间粘合剂

提供一种方法,使之能够依序寻访某个容器所含的各个元素,而又无需暴露该容器的内部表示方式 每个容器都有自己专属的迭代器

迭代器类似于指针

迭代器的种类

|---------|------------------------------|-----------------------------------|
| 种类 | 功能 | 支持运算 |
| 输入迭代器 | 数据的只读访问 | 只读,支持++、==、 != |
| 输出迭代器 | 数据的只写访问 | 只写,支持++ |
| 前向迭代器 | 读写操作,并向前推进迭代器 | 读写,支持++、==、 != |
| 双向迭代器 | 读写操作,并向前、向后操作 | 读写,支持++、-- |
| 随机访问迭代器 | 读写操作,并可以跳跃的方式访问任意数据,功能最强的迭代器 | 读写,支持++、--、[n]、-n、<、<=、>、>= |


(二)容器算法迭代器初始

(1)vector存放的内置数据类型

容器:vector

算法:for_each

迭代器:vector<int>::iterator

while循环的遍历

#include <iostream>

#include <vector>

using namespace std;

void t1()

{

vector<int>v;

v.push_back(10);//向容器中插入数据

v.push_back(20);

v.push_back(30);

vector<int>::iterator itBegin=v.begin();//起始迭代器------指向第一个容器中的元素

vector<int>::iterator itEnd=v.end(); //结束迭代器------指向容器中的最后一个元素的下一位

while(itBegin!=itEnd)

{

cout<<*itBegin<<endl;

itBegin++;

}

}

int main()

{

t1();

return 0;

}

for循环的遍历

#include <iostream>

#include <vector>

using namespace std;

void t1()

{

vector<int>v;

v.push_back(10);//向容器中插入数据

v.push_back(20);

v.push_back(30);

vector<int>::iterator itBegin=v.begin();//起始迭代器------指向第一个容器中的元素

vector<int>::iterator itEnd=v.end(); //结束迭代器------指向容器中的最后一个元素的下一位

for(vector<int>::iterator it=v.begin();it!=v.end();it++ )

{

cout<<*it<<endl;

}

}

int main()

{

t1();

return 0;

}

for_each的遍历

#include <iostream>

#include <vector>

#include <algorithm>

using namespace std;

void myprint(int val)

{

cout<<val<<endl;

}

void t1()

{

vector<int>v;

v.push_back(10);//向容器中插入数据

v.push_back(20);

v.push_back(30);

vector<int>::iterator itBegin=v.begin();//起始迭代器------指向第一个容器中的元素

vector<int>::iterator itEnd=v.end(); //结束迭代器------指向容器中的最后一个元素的下一位

for_each(v.begin(),v.end(),myprint);//利用STL提供遍历算法

}

int main()

{

t1();

return 0;

}


(四)vector存放自定义数据类型

#include <iostream>

using namespace std;

#include <vector>

#include <cstring>

class person

{

public:

person(string name)

{

this->name1=name;

}

string name1;

};

void t1()

{

vector <person> v;

person p("张一");

person p1("李二");

v.push_back(p);

v.push_back(p1);

for(vector <person>::iterator it=v.begin();it!=v.end();it++)

{

cout<<"姓名:"<<(*it).name1<<endl;

}

}

int main()

{

t1();

return 0;

}

相关推荐
猷咪9 分钟前
C++基础
开发语言·c++
IT·小灰灰10 分钟前
30行PHP,利用硅基流动API,网页客服瞬间上线
开发语言·人工智能·aigc·php
快点好好学习吧12 分钟前
phpize 依赖 php-config 获取 PHP 信息的庖丁解牛
android·开发语言·php
秦老师Q12 分钟前
php入门教程(超详细,一篇就够了!!!)
开发语言·mysql·php·db
烟锁池塘柳012 分钟前
解决Google Scholar “We‘re sorry... but your computer or network may be sending automated queries.”的问题
开发语言
是誰萆微了承諾12 分钟前
php 对接deepseek
android·开发语言·php
CSDN_RTKLIB16 分钟前
WideCharToMultiByte与T2A
c++
2601_9498683616 分钟前
Flutter for OpenHarmony 电子合同签署App实战 - 已签合同实现
java·开发语言·flutter
星火开发设计30 分钟前
类型别名 typedef:让复杂类型更简洁
开发语言·c++·学习·算法·函数·知识
蒹葭玉树41 分钟前
【C++上岸】C++常见面试题目--操作系统篇(第二十八期)
linux·c++·面试