STL学习笔记-stl概念

C++学习笔记(十二)(STL string容器 ) 本笔记主要来源于教程https://www.bilibili.com/video/av41559729?p=1 2 STL初识 2.1 STL的诞生   长久以来,软件界一直希望建立一种可重复利用的东西 C++的面向对象和泛型编程思想,目的就是复用性的提升 大多数情况下,数据结构和算法都未能有一套标准,导致被迫从事大量重复工作 为了建立数据结构和算法的一套标准,诞生类STL 2.2 ... 阅读详情

1.STL(标准模板库)

  • 诞生原因:提高代码复用性,提供一套标准的数据结构和代码

1.1基本概念

  • 1.广义上分-容器,算法,迭代器、
  • 2.容器和算法经过迭代器进行连接
  • 3.STL几乎所有所有代码都采用了模板类或模板函数

1.2 STL六大组件

STL大体分为:容器,算法,迭代器,仿函数,适配器(配接器),空间配置器

  • 1.容器:各种数据结构,用来存放数据
  • 2.算法:各种常用算法,
  • 3.迭代器: 扮演容器与算法之间的胶合剂
  • 4.仿函数: 行为类似函数,可作为算法的某种策略
  • 5.适配器:一种用来修饰容器或者仿函数或迭代器接口的东西(不常用)
  • 6.空间配置器:负责空间的配置与管理(不常用)

1.3 STL中容器,算法,迭代器

容器:将运用最广泛的一些数据结构实现出来

容器分类:

  • 1.序列式容器:强调值排序,序列式容器中的每个元素均有固定位置
  • 2.关联式容器:二叉树结构,各元素之间没有严格的物理上的顺序关系

常见容器有:向量(vector),列表(list),队列(queue),双端队列(deque),优先队列(Priority queue),集合(set),多种集合(multiset),映射(map),多重映射(multimap)。

算法分类

  • 1.质变算法:运算过程中会更改区间内元素的内容的算法。-如拷贝,替换,删除
  • 2.非质变算法:指运算过程中不会更改区间内的元素内容。-如查找,计数,遍历等。

迭代器:提供一种方法,算法要通过迭代器才能访问容器中的元素。
初学可理解为指针。
每个容器都有自己专属的迭代器。

迭代器种类:

  • 1.输入迭代器
  • 2.输出迭代器
  • 3.前向迭代器
  • 4.双向迭代器: 读写操作,并能向前和向后操作
  • 5.随机访问迭代器:读写操作,可用跳跃的方式访问任何数据,功能最强的迭代器

1.4算法容器迭代器初识

STL中最常用的容器为vector,可理解为数组

1.4.1 vector容器存放内置数据类型

容器: vector
算法: for_each
迭代器: vector::iterator

#include<iostream>
#include<vector>//包含容器库
#include<algorithm>//STL提供的标准遍历算法头文件

using namespace std;

//打印函数
void Myprint(int val)
{
	cout << val << endl;
}

void test1()
{
	//创建vector容器对象,且通过模板参数指定容器中存放的数据的类型
	vector<int> v;
	//向文件中放数据
	v.push_back(10);
	v.push_back(20);
	v.push_back(30);
	v.push_back(40);
	v.push_back(50);

	//每一个容器都有自己的迭代器,迭代器用于遍历容器中的元素
	//v.begin()返回迭代器,这个迭代器指向容器中第一个数据
	//v.end()返回迭代器,这个迭代器指向容器中最后一个数据的下一个位置
	//vector<int>::iterator拿到vector<int>这个容器的迭代器类型

	vector<int>::iterator pBegin = v.begin();
	vector<int>::iterator pEnd = v.end();

	//第一种遍历方式
	/*while (pBegin != pEnd)
	{
		cout << *pBegin << endl;
		pBegin++;
	}*/
	
	//第二种遍历方式
	/*for (vector<int>::iterator  t = v.begin(); t != v.end(); t++)
		cout << *t << endl;*/
	
	//第三种遍历方式
	//使用STL提供的标准遍历算法-头文件algorithm
	for_each(v.begin(), v.end(),Myprint);

}

int main()
{
	test1();

	system("pause");
	return 0;
}

1.4.2 vector存放自定义数据类型

vector存放自定义数据类型,并打印输出

#include<iostream>
#include<vector>//包含容器库
#include<algorithm>//STL提供的标准遍历算法头文件
#include<string>

using namespace std;

class Person {
public:
	Person(string name, int age)
	{
		this->m_name = name;
		this->m_age = age;
	}

	string m_name;
	int m_age;
};

void test02()
{
	vector<Person> v;
	Person p1("aaa", 10);
	Person p2("bbb", 20);
	Person p3("ccc", 30);
	Person p4("ddd", 40);
	Person p5("eee", 50);

	v.push_back(p1);
	v.push_back(p2);
	v.push_back(p3);
	v.push_back(p4);
	v.push_back(p5);

	for (vector<Person>::iterator it = v.begin(); it != v.end(); it++)
		cout << "姓名:" << (*it) .m_name<<"\t年龄:"<<(*it).m_age << endl;
}

//打印函数
void Myprint(Person* p)
{
	cout << "姓名:" << p->m_name << "\t年龄:" <<p->m_age << endl;
}

void test01()
{
	vector<Person*> v;
	Person p1("aaa", 10);
	Person p2("bbb", 20);
	Person p3("ccc", 30);
	Person p4("ddd", 40);
	Person p5("eee", 50);

	v.push_back(&p1);
	v.push_back(&p2);
	v.push_back(&p3);
	v.push_back(&p4);
	v.push_back(&p5);

	//方法一:循环遍历输出
	/*for (vector<Person*>::iterator it = v.begin(); it != v.end(); it++)
		cout << "姓名:" << (*it)->m_name << "\t年龄:" << (*it)->m_age << endl;
	*/
	//方法二:调用STL遍历输出函数
	for_each(v.begin(), v.end(), Myprint);

}

1.4.3 vector容器嵌套容器

容器嵌套容器

void test01()
{
	//构造大容器
	vector<vector<int>> v;
	//构造小容器
	vector<int> v1;
	vector<int> v2;
	vector<int> v3;
	vector<int> v4;
	//为小容器赋值
	for (int i = 0; i < 4; i++)
	{
		v1.push_back(i);
		v2.push_back(i+1);
		v3.push_back(i+2);
		v4.push_back(i+3);
	}

	//将小容器压入大容器内
	v.push_back(v1);
	v.push_back(v2);
	v.push_back(v3);
	v.push_back(v4);
	// 
	//循环遍历输出
	for (vector<vector<int>>::iterator it = v.begin(); it != v.end(); it++)
	{
		//此时(*t)为vector<int>类型
		for (vector<int>::iterator vit = (*it).begin(); vit != (*it).end(); vit++)
		{
			cout <<"\t" << *vit;
		}
		cout << endl;
	}

}
[C++高级部分] 泛型编程和STL技术 黑马课程学习笔记 C++的另一种编程思想称为泛型编程,主要利用的技术就是模板;C++提供两种模板机制:函数模板和类模板建立一个通用函数,其函数返回值类型与形参类型不具体制定,而是用一个虚拟的类型来代表 使用函数模板:①自动类型推导 直接像调用函数一样,传入实参即可,编译器自动推导出实参的类型 ②显示指定类型 函数名传入实参值基本语法和函数模板差不多,无非就是模板参数列表中多加了几个模板类型 调用时:Person p1 (“孙悟空”, 999);... 阅读详情

相关推荐

【STL标准库 & 范型编程】学习笔记(10):hashtable深度探索

Hello!ଘ(੭ˊᵕˋ)੭昵称:海轰标签:程序猿|C++选手|学生简介:因C语言结识编程,随后转入计算机专业,获得过国家奖学金,有幸在竞赛中拿过一些国奖、省奖…已保研学习经验:扎实基础 + 多做笔记 + 多敲代码 + 多思考 + 学好英语!唯有努力💪本文仅记录自己感兴趣的内容文章仅作为个人学习笔记记录,记录从0到1的一个过程希望对您有一点点帮助,如有错误欢迎小伙伴指正。

海到无边天作岸 山登绝顶我为峰 938

C++ STL万能头文件bits/stdc++.h

在写C++程序之前必须要做的一个步骤就是包含各种头文件,但是随着代码量的增大这些头文件实在是记不住……而且Visual Studio又不像Java 的eclipse、IntelliJ IDEA这种可以智能补全(头发都要秃了),终于查阅资料后发现一个万能头文件——bits/stdc++.h,只要写上这个头文件,基本一切STL容器的函数都可以搞定!! 可问题又来了……我用的编译器Visual Studio 2017里没有这个头文件怎么办,于是又有了一个新的想法。。只要将下列代码复制到文本文件,保存为st

weixin_53986026的博客 2231

ADS新手必看:ICCAP数据导入与导出CSV的完整流程(附常见问题解决)

本文为ADS新手详细讲解了如何将ICCAP测试数据导入ADS进行仿真分析,并导出为通用CSV格式的完整流程。内容涵盖文件格式解析、导入设置、数据验证、处理技巧及常见问题排查,重点解决了数据文件导入过程中的兼容性与单位映射等核心难点,帮助射频工程师高效连接测量与仿真环节。

peace的博客 558

C++ STL基本概念 学习笔记

组成 1.容器(containers) 2.算法 (algorithms) 3.迭代器 (iterators) 4.仿函数 (functors) 5.配接器 (adapters) 6.空间配置器 (allocators) 1. 容器 序列式容器:元素的可序(ordered), 有序(sorted) 关联式容器: array: 大小固定的序列容器,保存了一个以严格的线性顺序...

开到荼蘼的博客 447

随机森林文本分类

随机森林原理及代码实现 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 例如:第一章 Python 机器学习入门之pandas的使用 提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录随机森林原理及代码实现前言一、集成算法是什么?二、随机森林是什么三、 数据预处理3.1 先来看一下我们的文本数据3.2 预处理3.3 统计评论情感值积极与消极的占比二、使用步骤参数介绍(4个)属性1.引入库2.参数调参方法总结 前言 提示:这里可以添加本文要记录的大概内容: 例如

m0_46579176的博客 5808

机器学习面试笔试求职必背!八股文(1/5)

算法工程师,技术软件类求职机器学习必背八股文 更多算法/业务/HR面等笔试题面试题 —— >个性签名自取! 1. 特征工程: 1.1 为什么要对特征做归一化处理: Feature scaling,常见的提法有“特征归一化”、“标准化”,是数据预处理中的重要技术。特征间的单位(尺度)可能不同,比如身高和体重,比如摄氏度和华氏度,比如房屋面积和房间数,一个特征的变化范围可能是[ 1000 , 10000 ] [1000, 10000][1000,10000],另一个特征的变化范围可能是[ −.

大厂offer宝典 1万+

STL学习笔记-入门概念

1. 入门概念 STL最大的特点: 实现了算法和数据结构的有效分离 STL主要内容:算法(algorithm)、容器(container)、迭代器(iterator)                         容器 -> 提供数据结构                         算法 -> 按照实际问题,对数据进行处理                       

tangwei2014的专栏 1387

睿尔曼复合机器人之底盘操作流程

控制键”按下后,可在键盘上通过‘i’(向前),‘k’(向后),‘j’(向左旋转),‘l’(向右旋转)四个按键对底盘进行运动控制。选中禁⾏线功能后,使⽤⿏标在界⾯内点击选择起点,继续在其他地⽅点击,两点之间会连成⼀条线,可以进⾏多次连续点击,形成连续线条。4)扫图完成后,软件会重新启动,返回到监控页面,点击“激光”可看到当前机器激光扫描的实时数据,在页面上表现为红色边界线,点击菜单栏“控制”键使底盘在一定范围内运动,扫描到尽可能多的边界线,可发现与实际地图的黑色边界线不同,需要进行手动校正。

realman_Rop的博客 1475

《STL源码分析》学习笔记 — 迭代器概念

《STL源码分析》学习笔记 —迭代器概念一、迭代器是一种智能指针二、迭代器相应型别三、迭代器概念 一、迭代器是一种智能指针 在学习数据结构时,我们实现过一个版本的迭代器 — 链表迭代器实现。从这个实现中,我们不难看出两件事: 1、迭代器本身是一个智能指针,是 RAII 思想的一种体现; 2、迭代器的设计需求源于算法的实现,算法需要一种遍历容器的统一的方式;但是迭代器的实现需要开发者对于容器有充分的了解。从这个角度来说,提供迭代器应该是容器设计者的工作。 二、迭代器相应型别 当我们需要在算法中使用迭代器时,很

coding-hwz 248

PX4飞控CAN总线通信深度配置:从menuconfig到驱动加载的完整指南

本文详细解析了PX4飞控中CAN总线通信的深度配置流程,从menuconfig选项设置到驱动加载的完整指南。涵盖硬件抽象层、驱动层和应用层的配置细节,提供实际验证方法和故障排查技巧,帮助开发者高效实现CAN通信,特别适用于无人机和机器人底盘运动控制等场景。

weixin_30374009的博客 501

Uniapp返回上一页并刷新:亲测有效的 goBack 实现技巧!

这个技巧在实际开发中非常常用,特别适合表单提交后返回列表刷新这类场景。比起依赖onShow或复杂的vuex状态同步,这种方式更直接、好维护,也不容易出 bug。

代码简单说 Vue、JAVA、PHP、Node.js 熟练运用,接口、架构、性能全搞定。 1843

【STL学习笔记】 list 的基本概念和用法

C++ 标准模板库 STL 学习笔记,参考自黑马程序员 C++ 基础课程,list 篇

于此等你的博客 484

SEATA安装使用

springcloudalibaba集成seata分布式事务、seata持久化

原名又逢乱世。不要放下学习的脚步,毕竟比天天打牌、钓鱼、打游戏更能从内在充实自己。 2369

【STL学习笔记】 stack、 queue 和 deque 的基本概念和用法

C++ 标准模板库 STL 学习笔记,参考自黑马程序员 C++ 基础课程,stack、queue、deque 篇

于此等你的博客 783

19、英国模式:银行体系的演变与现代金融架构

本文深入探讨了英国银行体系从专业化向全能银行的演变过程,分析了自律监管模式的优劣,并解析了围栏制度对金融稳定的影响。同时,文章还介绍了信用合作社、建筑协会和投资银行的角色与转型,全面展示了英国金融体系的多样性与复杂性,以及其在全球金融市场中的重要作用。

embedding5hiker的博客 105

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

STL学习笔记(五)——温习一下C++的一些重要概念(下)

温习一下C++的一些重要概念(下)关于命名空间与头文件的概念,相信你对此已经理解得很深刻了,在此不再赘述(可翻阅《C++ Primer Plus》的相关章节)。我们来重点回顾一下以下知识点:差错和异常处理可被调用的对象并发与多线程初识分配器本节我们主要学习可被调用的对象、并发与多线程、初识分配器。2.可被调用的对象C++中可被某种方式调用其某些函数的对象可以是:函数指向成员函数的指针函数对象lam...

fifbro的博客 332

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

侯捷《STL源码剖析》--STL学习笔记

这是我看了《STL源码剖析》之后的一些个人的看法,因为要消化某一个东西,最好的方法就是写下自己的看法和理解。再经过时间的积累,就会慢慢积累到你对真正意义的掌握。这是我的第一个比较正式一点学习笔记,以前也有一些,但都比较零散,其中这段时间对STL比较着迷,也希望得到高手的指点,因为我现在对于ALLOCATOR和adapter还不是很理解,我自己也写过一些仿allocator和adapter,但还不太

spark的专栏 3532

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

C++ STL - 学习笔记

gcc 和 g++ 是GNU Compiler Collection(GNU编译器集合)中的两个关键组件,专门用于编译C语言和C++语言的程序。本篇博客用来记录我在学习 C++ 的 STL 过程的笔记以及问题。在 VSCode 中,C/C++ 插件安装失败,报错。3、检查结果,关闭 VSCode 后打开。在 VSCode 的终端中,执行。没有安装 gcc 和 g++删除插件后再安装,问题解决。插件安装因为未知原因失败。无法获取到正常的结果。1、安装 Mingw。2、然后配置环境变量。

qq_39748832的博客 1319

C++ STL学习笔记

C++ STL 是一个非常强大且灵活的工具集,它为我们提供了许多高效的数据结构和算法。通过学习和使用 STL,我们可以大大提高代码的可读性和开发效率。在这篇学习笔记中,我详细介绍了 STL 的容器、迭代器、算法和函数对象。希望通过代码示例和详细解释,能够帮助你深入理解 STL 的核心概念,并能在实际开发中充分利用 STL 提供的功能。

软件开发工程师 697

STL 笔记整理【学习记录】

STL 笔记整理【学习记录】 本文转载于:https://blog.youkuaiyun.com/m0_51990674/article/details/110456078

茶暖 219

STL 学习笔记

一、语法 二、容器

cc的专栏 930

STL初识

/vector容器中存放自定义的数据类型public:int m_Age;//向容器中添加数据//遍历容器中的数组it!= v.end();it++)cout << "姓名: " << (*it).m_Name << "年龄: " << (*it).m_Age << endl;cout << "姓名: " << it->m_Name << "年龄: " << it->m_Age << endl;//向容器中添加数据。

weixin_64048829的博客 484

C++学习笔记(三十五)——STL之仿函数

仿函数(Functor,Function Object)是重载operator()的类或结构体对象,它的行为类似于函数,可以像普通函数一样被调用。

weixin_45857378的博客 669

C++ STL 基础及应用(0) 目录

标准模板库(C++ STL)学习笔记,学习STL基础及应用。 该系列为 STL 学习笔记,帮助自己加深记忆与理解,也帮助读者们从头开始完整细致的学习 STL ,希望能一起进步。 本章为目录章节,介绍下以后的各章节将要讲什么内容。 最后附上 Alexander Stepanov 的照片,神之微笑。

?.?的专栏 1822

C++ 学习笔记合集目录【持续更新中】:类与对象、STL 及算法、数据结构与算法

仅为笔者学习笔记记录,用自己的理解记录学习!【持续更新中】1. C++ 基础篇。2. C++ STL 篇。3. C++ 高阶数据结构与算法篇。

weixin_53202576的博客 828

STL和泛型编程_学习笔记01

STL和泛型编程 本学习笔记是基于侯捷老师的STl和泛型编程课程 1. STL六大部件基础介绍 (Components) ​ 容器(Containers) ​ 分配器(Allocator) ​ 算法(Algorithms) ​ 迭代器(Iterators) ​ 适配器(Adapters) ​ 仿函数(Functors) #include <iostream> #include <algorithm> #include <functional> #include <v

万一 2045
上一篇: 数据结构(C语言版)学习笔记3-双向循环链表
下一篇: STL学习笔记01-string容器
SMH_壹壹贰
博客等级 码龄7年 17粉丝 25原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值