C++ STL小白学习笔记(零)——模板类template

C++中STL用法超详细总结 目录 1 什么是STL? 2 STL内容介绍 2.1 容器 2.2 STL迭代器 2.3 算法 2.4 仿函数 2.4.1 概述 2.4.2 仿函数(functor)在编程语言中的应用  2.4.3 仿函数在STL中的定义 2.5 容器适配器 2.5.1 stack 2.5.2 queue & priority_queue 3 常用容器用法介绍  3.1 vec... 阅读详情

前言:最近在准备CCF-CSP考试,学习一下STL模板库,阅读本文需对C++有基本了解(虽然本文介绍的也是基础内容);

学习视频:学习C++标准模版库(STL)

目录

 

0:模板-template

0.1在函数中使用template:

0.2在类中使用template

0.3 运算符重载


0:模板-template

template关键字用于声明模板类;

0.1在函数中使用template:

在函数声明的上一行输入以下代码:

template <typename T>

例如:

template <typename T>
//求x的平方
T square(T x){
    return x*x;
}

优点:省去书写大量的重载函数,程序可自主识别x类型并返回平方值;

值得注意的是:当输入的x为非数值类型时会出错,要记得进行健壮性检测;

0.2在类中使用template

在类的声明前一行输入template声明

我们来看一个例子:

template <typename T>
class BoVector{
	T arr[100];
	int size;
public:
	BoVector():size(0){};//这种类的初始化方法需要熟练使用
	void push(T x){arr[size]=x;++size;}
	void Show(){
		for(int i=0;i<size;i++){
			cout<<arr[i]<<" ";
		}
		cout<<endl;
	}	
}; 

int main(){
	BoVector<int> bv;//这里需要指出,需在<>内指出模板类T的类型 
	bv.push(4);
	bv.push(9);
	bv.push(16);
	bv.Show();
    return 0;
}

我只需要声明一个BoVector即可使用int、long、char等多种类型的向量,只需要在实例定义时,在<>内声明类型即可;

0.3 运算符重载

在运算符重载中也可使用template类及使用了template类的类(如BoVector);

我们不妨重载一下BoVector类的乘法:

添加get(int i)与getSize()两个函数如下:

	T get(int i)const {return arr[i];}
	int getSize()const {return size;}

编写乘法重载函数operator*如下:

template <typename T>
BoVector<T> operator*(const BoVector<T>& A,BoVector<T>& B){
	BoVector <T> result;
	for(int i=0;i<A.getSize();i++){
		result.push(A.get(i)*B.get(i));
	}
	return result;
}

编程易错点:

在定义或声明使用了template类的实例时,需在类名后加<具体类型>;

[一个使用了模板类的类]<具体类型>  [实例名]

我们将square与BoVector结合起来,即可得到如下代码:

#include<iostream>
using namespace std;

template <typename T>
//求x的平方
T square(T x){
    return x*x;
}

template <typename T>
class BoVector{
	T arr[100];
	int size;
public:
	BoVector():size(0){};
	void push(T x){arr[size]=x;++size;}
	
	T get(int i)const {return arr[i];}
	int getSize()const {return size;}
	
	void Show(){
		for(int i=0;i<size;i++){
			cout<<arr[i]<<" ";
		}
		cout<<endl;
	}	
}; 

template <typename T>
BoVector<T> operator*(const BoVector<T>& A,BoVector<T>& B){
	BoVector <T> result;
	for(int i=0;i<A.getSize();i++){
		result.push(A.get(i)*B.get(i));
	}
	return result;
}

int main(){
	BoVector<int> bv;//这里需要指出,需在<>内指出模板类T的类型 
	bv.push(4);
	bv.push(9);
	bv.push(16);
	BoVector<int> res;
	res=square(bv);
	res.Show();
    return 0;
}

自己运行试试看吧!

C++ STL 知识点总结 概述 简介 简单介绍:C++ STL(标准模板库)是一套功能强大的 C++ 模板类,提供了通用的模板类和函数,这些模板类和函数可以实现多种流行和常用的算法和数据结构,如向量、链表、队列、栈等。 STL的一个重要特点就是数据结构和算法的分离。例如,STL中sort()函数是完全通用的,你可以用它来操作几乎任何数据集合,包括链表,容器和数组。 STL另一个重要特性是它不是面向对象的,主要依赖于... 阅读详情

相关推荐

C++ 标准模板库STL

C++ STL标准模板库详解

kyle的博客 2万+

浅学STL(1):template

模板(Template)指C++程序设计语言中的函数模板与类别模板,大体对应于java和C#中的泛型。——来自搜狗百科。 主要在写法上有所借鉴,template的运用可以减少代码量(一个函数,类实现对多种数据类型的处理)。 以下是在B站观摩某大佬的STL的讲解视频同时自己写(CHAO)的代码,感觉比较容易理解。 B站大佬传送门 #include&lt;iostream&gt; using...

小狮子 246

C++最强大的特性之一——模板Templates(下:模板类)—原创

本文为作者EricNTH的原创博客,允许转载但请务必注明出处! 嗨,大家好,我们又见面了,今天我们来继续谈谈C++模板——模板类。 目录 1.C++最强大的特性之一——模板Templates(上:模板函数)—原创 2.C++最强大的特性之一——模板Templates(下:模板类)—原创 ...

EricNTH的博客 1391

c++系列七 —— STL编程之模板template

往期地址: c++系列一 —— c++的封装 c++系列二 —— c++的继承 c++系列三 —— 继承和多态特性 c++系列四 —— 运算符重载 c++系列五 —— 静态成员和静态类 本期主题: 友元类和友元函数 1.模板的定义 1.1 简单例子引出模板 1.2 模板函数的使用 文章目录1.友元函数1.1 定义:1.2 实际例子引出1.3 友元函数的两种实现1.外部函数作为友元函数的实现2.另一个类中的成员函数作为友元函数的实现1.4 友元函数总结2.友元类2.1 友元类使用举例2.2 友元类的总

weixin_37620587的博客 679

STL笔记(1)——STL的一些组态

STL一些组态介绍

上善若水 2935

C++模板类深度解析:从原理到实现,手写STL链表

泛型编程是C++实现代码复用的核心技术,其核心机制是模板。模板通过在编译期生成类型安全的特化代码,解决了为不同数据类型重复编写相似逻辑的问题,实现了高度的代码复用。从原理上看,模板类本质上是编译器的代码生成蓝图,通过模板参数(类型、非类型、模板模板参数)实现通用设计,并借助实例化过程为具体类型生成特化版本。这一机制不仅保证了类型安全,还通过惰性实例化优化了编译效率。在工程实践中,模板类广泛应用于标准库容器(如std::list)、算法和元编程,是实现高效、灵活数据结构的基础。本文以C++模板类为核心,深入剖

keke1314520的博客 352

url重写

 一. 为了页面更有利于seo优化,url重写程序需要做出的不可缺少的手段之一。 二.目前url重写最常见的两种方法有:          1.通过熟悉页面的内部执行流程,也就是asp.net请求管道中的相关知识点,进行url重写。          2.通过使用微软提供的UrlRewriter.dll实现url重写(简单); 三、在请求管道中的第一个请求管道中拦截url并使其完成url重...

weixin_33814685的博客 433

⚡【C++要笑着学】(13) STL介绍:什么是STL标准模板库 | STL的版本 | 浅谈STL的缺陷

再讲解函数模板之前先对STL做一个小铺垫,本篇将对STL做一个简单的介绍。

有道无术, 术尚可求。有术无道, 止于术。 3036

Feign的RequestTemplate

Feign的RequestTemplate

weixin_42594143的博客 2493

C++ STL教程(1)STL简介

STL(Standard Template Library),即标准模板库,是一个具有工业强度的,高效的C++程序库。它被容纳于C++标准程序库(C++ Standard Library)中,是ANSI/ISO C++标准中极具革命性的一部分。该库包含了诸多在计算机科学领域里所常用的基本数据结构和基本算法。为广大C++程序员们提供了一个可扩展的应用框架,高度体现了软件的可复用性。STL 最初由惠普实验室开发,于 1998 年被定为国际标准,正式成为 C++ 程序库的重要组成部分。

二进制君 3115

BRep实战指南:从理论到文件格式的全面解析

本文全面解析BRep(边界表示法)从基础概念到文件格式的实战应用。详细介绍了BRep的数学定义、工业应用场景,以及STEP、IGES等主流文件格式的对比与使用技巧,帮助读者掌握三维建模核心技术并优化性能。

weixin_29235923的博客 408

C++中的模板总结

文章目录模板概念函数模板类模板模板的特化 模板概念 对于重载函数来说,C++的检查机制能够通过参数和所属类的不同去调用不同的重载函数,例如,当我们需要求两数最大值时,定义man()函数的不同重载版本 int max(int x ,int y) { return (x > y) ? x : y ; } float max(float x ,float y) { return (x > y) ? x : y ; } 但是如果在main函数中,定义了double x,y,执行max(x,y);

weixin_47641702的博客 522

Simulink实战:5步搞定固定翼飞行器六自由度动力学建模(附模型下载)

本文提供了一份详细的Simulink实战指南,通过5个核心步骤手把手教你构建固定翼飞行器的六自由度动力学模型。内容涵盖从顶层架构设计、核心方程手动实现,到模型集成、测试调试及进阶优化的完整流程,旨在帮助航空航天学生和工程师将抽象理论转化为可运行的仿真模型,并附有模型下载。

perl8的博客 635

C++模板,STL(Standard Template Library)

这篇文章的主要内容是C++中的函数模板、类模板、STL的介绍。 希望对C++爱好者有所帮助,内容充实且干货,点赞+收藏防止找不到!

cx的学习经历 1369

STM32CubeMX + HAL库避坑指南:为什么你的代码总在SystemClock_Config卡住?

本文深入剖析了STM32开发者在使用STM32CubeMX和HAL库时,代码在SystemClock_Config函数中卡死的根本原因。文章不仅指出硬件时序、Flash延迟配置等常见陷阱,更提供了从硬件设计、软件容错到深度调试的系统性解决方案,帮助开发者构建鲁棒的时钟初始化策略,彻底告别启动卡顿问题。

bb456的博客 929

系统安装、qt配置、安装pcie驱动

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 安装Linux系统指定:ununtu20.04并配置相关软件环境 前言 提示:这里可以添加本文要记录的大概内容: ununtu20.04、Qt 5.9.0、pcie驱动 提示:以下是本篇文章正文内容,下面案例可供参考 一、安装系统 制作系统盘(win10),在开机时按相应键进入BIOS,(华硕需要先改配置启动->CSM->开启->第一个选项选第一个或第二个),等待即可 进入后按照https://www.sysgeek.

weixin_44832804的博客 2206

C++ Template Class List

assssssss

I AM BACK 1689

【CAN总线测试】——使用VH6501 进行Busoff快慢恢复测试

即在IDBase中填标准帧11位二进制ID,如果不满11位,高位补零,凑齐11位,并将下方CurrTriggerField设置干扰前一位AckSlot位,Triggeroffset设置为0。首先确认环境支持VN6501,6501硬件连接成功后,工程的小闪电是正常黄色状态,若是灰色证明缺少License,或者软件安装环境不正确。填写干扰报文ID、干扰位置 注意这里的干扰位置是实际干扰的前一位,TriggerOffset表示偏移量,可以干扰某个字节的具体位.找到并打开Panel后,开启工程,并且配置面板。

LOVE135149的博客 5633

C++标准模板库STL(Standard Template Library)详解

C++ 标准模板库(Standard Template Library,STL)是一套功能强大的 C++ 模板类和函数的集合,它提供了一系列通用的、可复用的算法和数据结构。STL 的设计基于泛型编程,这意味着使用模板可以编写出独立于任何特定数据类型的代码。STL 分为多个组件,包括容器(Containers)、迭代器(Iterators)、算法(Algorithms)、函数对象(Function Objects)、适配器(Adapters)和 分配器(Allocators)等。使用 STL 的好处: 代码复

weixin_44156305的博客 2097

【Codecs系列】x265编码器(十二):子像素运动搜索

在基于块运动补偿的视频编码框架中,运动搜索是最为重要的环节之一,同时也是编码端最为耗时的模块。运动搜索包括整像素运动搜索和子像素运动搜索,其中整像素运动搜索已经有很多快速算法,比如经典的三步搜索法、菱形搜索、六边形搜索以及TZSearch等等;但子像素搜索的快速算法却比较少,本文主要讲解x265编码器中的子像素搜索方法以及相关的快速搜索方法。

优快云明星博主,认证博客专家,视频、Matlab领域优质创作者。 749

微信8.0所有URL Scheme大全:隐藏入口与使用场景详解 内附195条微信URL Scheme

URL Scheme 类似于一个协议地址,它的作用和网页的https://差不多,只不过它不是打开网页,而是直接跳转到微信App内部的功能页面。→ 打开微信扫一扫→ 打开零钱通详情→ 打开微信面对面支付微信功能的“快捷指令”。整理下来,微信的 URL Scheme 基本覆盖了支付、联系人、扫一扫、小程序、运动设备等多个入口。对开发者来说,这些 Scheme 就像是隐藏的快捷通道,在某些场景(比如支付唤起、活动红包、客服入口)能大大简化流程。微信对外部调用限制非常严格。

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

C++自定义模板类中STL iterator未定义的问题

C++自定义模板类中STL iterator未定义的问题最近在写一个模板类用到了stl map迭代器,遇见一下问题#include <map> #include <iostream> using namespace std; template <class T> class A { public: void iterate() { map<int, T>::iterator itr;

pkucuida的博客 1459

9.9华为OD机试真题 新系统 - 受限任务分配 (Java/Py/C/C++/Js/Go)

华为OD机试真题 新系统【受限任务分配】,提供C语言、Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解,以及在线OJ模拟做题。华为OD机试真题 【受限任务分配】多语言题解。

qq_45776114的博客 734

The C++ Standard Template Library (STL)

The C++ Standard Template Library (STL) Difficulty Level :Easy Last Updated :28 Jun, 2021 The Standard Template Library (STL) is a set of C++ template classes to provide common programming data structures and functions such as lists, stacks, arrays, et..

具身机器人和通用AI 392

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

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

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

【C++标准库-体系结构与内核分析】STL源码到底在哪里可以看到?

1.VC VC版本可以在VS中的VC中看到,我这里给出的版本是VS2015中的VC的目录.VC的分布相对于G++/GCC还是比较清晰的. VS中的VC 头文件: C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include STL源码: C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\crt\src\stl 2.G++/GCC 1.老师说 侯捷老师强烈推荐2.9.1版本

Edidaughter的博客 4815

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

c++学习:STL库(框架)+字符串模板类string+vector容器+list链表

int main()//实例化一个STL库中的字符串类模板的对象string s4;上面的s1,s2,s3,s4定义其实都是一样的,c++为了方便,将std::basic_string另起名为std::string。

weixin_59669309的博客 1744

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

上一篇: VS2019配置PyQt环境教程(小白向)
下一篇: C++STL小白学习笔记(一)——STL概述
白小枫!
博客等级 码龄9年 7粉丝 10原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值