首页 > 编程语言 >C++_STL提供了六大组件

C++_STL提供了六大组件

时间:2024-04-10 16:56:44浏览次数:24  
标签:函数 STL C++ 类型 组件 POD 模板

STL提供了六大组件

Standard Template Library
 容器:Containers 各种数据结构,如 vector,list,deque,set,mep等。容器是类模板。 在声明容器变量时,可以指定容器将保存的元素的类型 
 算法:各种常用的算法,提供了执行各种操作的方式,包括对容器内容执行初始化,排序,搜索和转换等操作,比如sort,search,copy,erase。
 仿函数:Functors 也成函数对象,行为类似函数,可作为算法的某种策略。从实现角度来看,仿函数是一种重载了operator()的class或者class template。
 迭代器:Iterators 迭代器用于遍历对象集合的元素,扮演容器与算法之间的胶合剂,是所谓的"泛型指针",一共有五种类型,以及其他衍生变换。
 适配器:Adaptors 一种修饰容器或者仿函数或迭代器接口的东西。例如:STL提供的queue和stack,就是一种空间适配器,因为他们底部完全借助于deque。
 分配器:Allocators 也成为空间配置器,负责空间的配置与管理
容器 和 算法 是通过 迭代器 进行关联的 ;
 
STL 的实现	
    C++的模板为泛型程序设计奠定了关键的基础 以一种类型参数化(type parameterized)的方式实现的	
     STL 中几乎所有的代码都采用了模板类和模版函数的方式实现,
STL 的使用

容器元素的需求

map或unordered_map,
   01.key为自定义类对象或指针时,需要为map提供哈希函数和比较函数
   02.函数对象(Functor)是一种重载了函数调用运算符(operator())的类,可以像函数一样被调用
  例如:
    map中有4个参数,
	   前两个参数是key和val的类型,
	   第三个参数表示比较的仿函数,用于对键值进行比较,默认情况下采用less<Key>,
	          自定义类中重载<运算符 或者显式的传入一个比较仿函数,或者普通函数,或者定义一个lambda表达式
	   第四个参数表示分配器的类型,用于分配和管理内存
    unordered_map有5个参数,自定义类型作为unordered_map的key
	    前两个参数是key和val的类型,
	    第三个参数是一个哈希函数,表示用于计算哈希值,
		第四个参数是比较函数,用于判断两个键是否相等,
		第五个参数是分配器类型	
	
       方法1:在类中重载==操作符并且自定哈希函数
       方法2:自定义比较(可以是普通的函数,仿函数,lambda表达式)并且自定义哈希函数	
    使用自定义结构体,需要重载hash函数和equal函数	

C++ using的使用

 C++中的Using的四种用法
   01.命名空间(Namespace)             using namespace std;
   02..别名声明(Alias Declaration)    using MyInt = int;
   03.函数重载(Function Overloading)	using MyClass::foo;  
   04.模板使用(Template Using)using关键字还可以用于引入模板特化

模板

 C++中,模板是一种用于生成泛型类型或函数的机制	
  template是声明模板的关键字,告诉编译器开始泛型编程	
  
  01. 模板的两种声明:
         template<class T>
         //or
         template<typename T>
  02.类型:函数模板 与 类模板
  
  03.模板特化(Template Specialization)
  C++中,模板类和模板函数是不能进行分离编译的

结构体

struct
结构体   
 结构体变量的首地址:
   1.结构体变量的地址就是结构体的首地址
   2.结构体第一个成员的地址就是结构体的首地址
 结构体: 元素可以是异质的,默认是public的
 
 结构体数组-结构体指针-结构体嵌套,结构体作为函数参数(传值 传地址)
 
 结构体被设计成主要用于组织数据

C++类型系统

C++的类型系统非常丰富和复杂,它包括标量类型(Scalar Type)、
    复合类型(Compound Type)、标准布局类型(Standard Layout Type)、平凡类型(Trivial Type)和聚合类型(Aggregate Type)
 标量类型和复合类型:这是C++类型系统的基础。
     标量类型包括算术类型(整数、浮点数等)、枚举类型和指针类型。
	 复合类型包括数组、函数、类、结构、联合和引用。理解这些类型是编写任何C++代码的基础。
 标准布局类型:这种类型的内存布局与C兼容,
     这意味着你可以在C++和C之间安全地传递这种类型的对象。这对于与C语言库进行交互或编写需要与C兼容的代码非常重要。
 平凡类型:平凡类型的对象可以通过简单的内存复制来创建和销毁。
    这使得它们在性能敏感的代码中非常有用,因为它们的创建和销毁通常比非平凡类型的对象更快。    
 POD类型:POD类型是标准布局类型和平凡类型的交集。
     这种类型的对象可以通过简单的内存复制来创建和销毁,并且其内存布局与C语言兼容。这使得POD类型非常适合用于与C语言代码的互操作,
	 以及用于需要直接控制对象内存布局的场合。    
 聚合类型:聚合类型是一种可以使用花括号初始化的类型。
    这使得它们在需要初始化多个成员的情况下非常有用,因为你可以在一个表达式中指定所有成员的值。

POD

POD 是 C++中 Plain Old Data 的缩写,
  指的是可以通过简单内存复制进行复制和传输的数据类型。
这表示该类型与用于 C 程序语言的类型兼容,即它能直接以二进制形式与 C 库交互


C定义的基本数据类型比如int、char、float、枚举、指针、数组和结构等通过二进制拷贝后还能保持数据不变,
    即编译器可以通过二进制数据将该类型正确解析出来。
C++中的类类型引入了继承和派生等新概念,编译器无法解析这些复杂数据结构,
   因此C++提出POD数据结构的概念用于兼容C语言,
   由于C++中基本内置类型都是POD类型,
    一般讨论class、struct和union是否是POD类型的。	
  1.
    默认的构造函数与析构函数
    默认的拷贝构造函数和移动构造函数
    默认的拷贝赋值运算符和移动赋值运算符
    不能包含虚函数和虚基类  
  2.标准布局
      “布局”是指类、结构或联合类型的对象的成员在内存中的排列方式	  

参考

 C++中的POD类型 https://cloud.tencent.com/developer/article/1814242	  

标签:函数,STL,C++,类型,组件,POD,模板
From: https://www.cnblogs.com/ytwang/p/18126383

相关文章

  • react组件之cmao-ui,编写流程图的功能介绍
    流程组件介绍:该组件参考老版力软learun框架中的jquery流程组件进行重构,改写为react的组件。样式、操作、交互方式大致相近。该组件依赖的react版本大于18(不是不能做到兼容旧版react,而是要写就写新版本的,还用老的干嘛)下载//npm下载npminstallcmao-ui引用该组件是......
  • C++笔试面试题整理
    常见C++笔试面试题整理1.C和C++的区别C是面向过程的语言,是一个结构化的语言,考虑如何通过一个过程对输入进行处理得到输出;C++是面向对象的语言,主要特征是“封装、继承和多态”。封装隐藏了实现细节,使得代码模块化;派生类可以继承父类的数据和方法,扩展了已经存在的模块,实现......
  • C++的保护类型还能这么玩
    将一个类的析构函数定义为 protected保护类型:这个类就不能在外部被析构,被定义。只能在它的子类,或者它的友元类里面去定义。定义了保护类型的析构函数,它的声明周期在子类或者友元类里面自动管理。最主要理解它的限制,理解生命周期就好。 定义为保护类型的好处:将一个类......
  • C++初阶:6.string类
    string类string不属于STL,早于STL出现看文档C++非官网(建议用这个)C++官网文章目录string类一.为什么学习string类?1.C语言中的字符串2.两个面试题(暂不做讲解)二.标准库中的string类1.string类(了解)2.string类的常用接口说明(注意下面我只讲解最常用的接口)(1)......
  • 结合 tensorflow.js 、opencv.js 与 Ant Design 创建美观且高性能的人脸动捕组件并发
    系列文章目录如何在前端项目中使用opencv.js|opencv.js入门如何使用tensorflow.js实现面部特征点检测tensorflow.js如何从public路径加载人脸特征点检测模型tensorflow.js如何使用opencv.js通过面部特征点估算脸部姿态并绘制示意图tensorflow.js使用opencv.js将人......
  • C++类拷贝控制 深拷贝 浅拷贝
    参考博文:https://www.cnblogs.com/zhxmdefj/p/11579364拷贝构造函数,拷贝赋值运算符拷贝构造函数第一个参数是自身类类型引用,其他参数都有默认值的构造函数就是拷贝构造函数。classSales_data{public:   Sales_data();  //默认构造函数   Sales_data(const......
  • 无用代码扫描组件设计
    1、现状痛点系统越来越臃肿,开发过程中可能产生的无用代码增加了系统维护成本。2、设计思路2.1、静态代码扫描方案本方案解决静态代码下无调用方法扫描,通过ASTParser对静态文件进行扫描分析,获取代码块来判断调用关系。基本步骤及思路(1)载入本地磁盘项目(2)循环使用ASTPars......
  • C++U4新-第06课-二分答案
    二分答案学习目标 先学习单调性,二分查找的单调性意思二分答案单调性 二分答案的思路  [【二分答案】-砍树] #include<iostream>usingnamespacestd;intmain(){intn,m;inttree[1000005];cin>>n>>m;for(inti=1;i<=n;i......
  • C++ - VS2019配置Qt开发环境
    下面正式介绍VS2019+Qt5.14.2开发环境的配置,其它版本类似,安装步骤如下:注意:首先自行安装好vs2019和qt5.14.2再执行以下步骤1、VisualStudio2019配置Qt环境(1)插件下载安装点击VS上方的菜单栏,选择“拓展—>管理拓展”进入管理拓展对话框,在右上方搜索qt,出现搜索结果后,选择......
  • 百度驾驶证C++离线SDK V1.1 C#接入
    百度驾驶证C++离线SDKV1.1C#接入目录说明 效果 项目代码下载 说明 自己根据SDK封装了动态库,然后C#调用。SDK包结构效果 项目代码usingNewtonsoft.Json;usingOpenCvSharp;usingSystem;usingSystem.Collections.Generic;usingSystem.Diagnosti......