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

这篇具有很好参考价值的文章主要介绍了C++模板,STL(Standard Template Library)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

这篇文章的主要内容是C++中的函数模板类模板STL的介绍

希望对C++爱好者有所帮助,内容充实且干货,点赞+收藏防止找不到!

再次感谢每个读者和正在学习编程的朋友莅临!

更多优质内容请点击移驾:

C++收录库:重生之C++启程(文章平均质量分93)

目录

 

1.模板

(1)函数模板

(2)类模板

2.认识STL

(1)什么是STL

(2)STL的六大组件

(3)如何学习STL


1.模板

(1)函数模板

假设一个场景:当我们要写一个swap()函数时候,是不是要这样写

#include<iostream>
using namespace std;
void swap(int& a,int& b)
{
	int tmp = a;
	a = b;
	b = tmp;
}
int main()
{
	int a = 2;
	int b = 3;
	swap(a, b);
	return 0;
}

那当我们同时又想交换两个char类型的变量,是不是得这样写

#include<iostream>
using namespace std;
void swap(int& a,int& b)
{
	int tmp = a;
	a = b;
	b = tmp;
}
void swap(char& c, char& d)
{
	char tmp = c;
	c = d;
	d = tmp;
}
int main()
{
	int a = 2;
	int b = 3;
	swap(a, b);
	char c = 's';
	char d = 'b';
	swap(c, d);
	return 0;
}

这样写构成了函数的重载,使得对应类型与对应的函数相匹配,每次交换时找到合适类型的函数。

虽然函数重载一定程度上解决了不同类型形参调用相同功能函数的需求,但是当每次有新的参数类型需求,又需要程序猿自己写一份重载函数出来。

C++模板,STL(Standard Template Library),重生之C++启程,c++,开发语言

由于这两个swap()函数的功能完全相同,只是参数类型不同,再写一份属实tm烦。

C++模板,STL(Standard Template Library),重生之C++启程,c++,开发语言

这时,顺应需求的模板就闪亮登场啦。

函数模板定义:函数模板代表了一个函数家族,该函数模板与类型无关,在使用时被参数化,根据实参类型产生函数的特定类型版本

函数模板格式:template<class T1,class T2…>

                          函数形参(T1 a,T2 b)

光看这个格式可能有点突兀,下面就用swap函数来感受一下函数模板的魅力

#include<iostream>
using namespace std;
template <class T>//函数模板
void newswap(T& a,T& b)
{
	T tmp = a;
	a = b;
	b = tmp;
}
int main()
{
	int a = 2;
	int b = 3;
	newswap(a, b);
	char c = 's';
	char d = 'b';
	newswap(c, d);
	return 0;
}

运用函数模板,代码明显更加简短,且不同类型形参,newswap函数都能应对自如

C++模板,STL(Standard Template Library),重生之C++启程,c++,开发语言

原理:函数模板是一个蓝图,它本身并不是函数,是编译器用使用方式产生特定具体类型函数的模具。所以其实模板就是将本来应该我们做的重复的事情交给了编译器

C++模板,STL(Standard Template Library),重生之C++启程,c++,开发语言

模板实例化:用模板去产生特定具体类型函数的过程称作模板的实例化

隐式实例化:让编译器自己推演模板参数的T的类型。例如上图,在swap函数调用时编译器可以通过实参的类型实例化模板参数T,从而产生T类型的函数供我们调用

但是编译器推演不出来就会报错:

C++模板,STL(Standard Template Library),重生之C++启程,c++,开发语言

显式实例化:在模板函数调用时程序猿手动控制T的类型。

#include<iostream>
using namespace std;
template <class T>
void newswap(T& a,T& b)
{
	T tmp = a;
	a = b;
	b = tmp;
}
int main()
{
	int a = 2;
	int b = 3;
	newswap<int>(a, b);
	return 0;
}

 C++模板,STL(Standard Template Library),重生之C++启程,c++,开发语言

此时就是模板的显式实例化,程序猿显式实例化后,编译器就不会去推演模板参数T的类型了。

(2)类模板

类模板的大致思路和函数模板相同。

也是一个类只是由于参数的类型不同就得写不同参数类型的类。便将模板特性运用在类上。使得一份类模板可以同时供应不同类型参数的类需求,非常好用。

C++模板,STL(Standard Template Library),重生之C++启程,c++,开发语言

2.认识STL

(1)什么是STL

对于C++爱好者来说,STL可以说是C++标准库里最常用的工具库。它不仅是一个可复用的组件库,而且是一个包罗数据结构与算法的软件框架。熟练使用STL以及学习STL底层是必不可少的。

C++模板,STL(Standard Template Library),重生之C++启程,c++,开发语言

(2)STL的六大组件

C++模板,STL(Standard Template Library),重生之C++启程,c++,开发语言

(3)如何学习STL

第一境界:熟练使用STL

第二境界:了解STL底层

第三境界:扩充STL

总结:能用,能理,能扩展。


下篇文章开始进入C++中STL的深入学习。

C++模板,STL(Standard Template Library),重生之C++启程,c++,开发语言

今天的内容就分享到这里啦,如果对大家有所帮助,记得点赞收藏不迷路。订阅下方C++专栏。持续爆肝C++实用知识。文章来源地址https://www.toymoban.com/news/detail-642297.html

到了这里,关于C++模板,STL(Standard Template Library)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • C++模板——template

    目录 1. 模板 2. 函数模板 2.1 函数模板概念 2.2 函数模板格式 2.3 函数模板原理 2.4 函数模板的实例化 2.5 模板参数的匹配原则 2.6 声明定义分离 3. 类模板 3.1 类模板格式 3.2 类模板的实例化 3.3 类模板中函数放在类外进行定义时 4. 模板分离编译 4.1 什么是分离编译 4.2 模板的分离

    2024年01月20日
    浏览(39)
  • 一文说清楚c++模板Template的用法

    模板(Template)指c++程序设计语言中采用 类型 作为参数的程序设计。 1.通用格式 函数模板定义格式 其中,template和class是,class可以用template替换;括号中的参数叫做模板形参,模板形参需要调用该模板函数时提供的模板实参来初始化模板形参,一旦编译确定了实参类

    2024年02月14日
    浏览(42)
  • 波奇学C++:模板和STL

    先假设一个场景,我们要编写一个函数交换a,b两个数的值 swap函数可以帮我们交换两个int型的值,那如果要交换的类型是float,double类型呢? 当然我们可以选择函数重载,使它支持多个数据类型。 可是这就意味着我们就要编写大量重复的代码。 有没有一种方法可以优化这个过

    2024年02月06日
    浏览(26)
  • [C++]模板初阶与STL简介

    目录 模板初阶与STL简介::                                         1.泛型编程                                         2.函数模板                                         3.类模板                                         4.什么是STL                  

    2023年04月25日
    浏览(33)
  • C++初阶之模板和STL简介

    泛型编程是一种编程范式,旨在实现可重用、通用和高度抽象的代码。它允许程序员编写与数据类型无关的代码,以便在不同的数据类型上进行操作,而无需为每种数据类型重复编写代码。 在传统的编程中,通常需要为每种数据类型编写特定的代码。例如,如果要实现一个排

    2024年02月16日
    浏览(39)
  • C++ STL 标准模板库介绍与入门

    目录 1、概述 1.1、C++ 标准库 1.2、Boost库 2、STL 版本 2.1、HP 原始版本

    2024年02月05日
    浏览(60)
  • 【c++】:STL模板中string的使用

        文章目录 STL简介 一.认识string 二.string中基本功能的使用 总结   STL(standard template libaray-标准模板库): 是 C++ 标准库的重要组成部分 ,不仅是一个可复用的组件库,而且 是一个包罗数据结构与算法的软件框架 。 STL 的版本 原始版本 Alexander Stepanov、Meng Lee 在惠普实验室完

    2024年01月18日
    浏览(41)
  • c++标准模板(STL)(std::array)(三)

    template     class T,     std::size_t N struct array; (C++11 起   std::array 是封装固定大小数组的容器。 此容器是一个聚合类型,其语义等同于保有一个 C 风格数组 T[N] 作为其唯一非静态数据成员的结构体。不同于 C 风格数组,它不会自动退化成 T* 。它能作为聚合类型聚合初始化,只要

    2024年02月02日
    浏览(47)
  • C++——STL标准模板库——容器详解——list

    list:双向链表。list是一种分布式存储的线性表,每个节点分为数据域和指针域,其中指针域中包含一个指向前驱节点的指针和一个指向后续节点的指针,基本模型如下: 1、双向链表:每个元素都有一个前驱和一个后继,这种结构允许在链表的任何位置实现快速的插入和删除

    2024年01月16日
    浏览(46)
  • 【c++】:模拟实现STL模板中的string

        文章目录 前言 一.string的模拟实现 总结   上一篇文章我们详细介绍了STL中的string的一些常用的接口,这一篇文章我们将从底层实现string类,当然我们只是实现一些重要的,经常使用的接口,并且不是完全按照STL中的string去走的。   首先我们为了防止我们写的string类与库

    2024年01月20日
    浏览(52)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包