首页 > 编程语言 >C++ 基础部分 个人笔记

C++ 基础部分 个人笔记

时间:2023-03-14 18:33:27浏览次数:40  
标签:函数 个人 C# 数据类型 笔记 C++ 泛型 模板

本人菜鸟,个人学习笔记,如有错误还请指教

C++ 模板是什么

C++ 模板是一种基于类型参数化的编程技术,使用模板可以使得程序员编写独立于具体数据类型的通用代码。通过参数化类型,你可以创建一种可以在多种类型上执行相同操作的函数或类,从而提高代码的复用性和可读性。C++ 模板广泛应用于 STL (标准模板库)中,如容器、迭代器、算法等。
C++ 模板可以提供两种类型的参数化,即函数模板和类模板。函数模板可以让你定义一个通用函数,而类模板可以让你定义一个通用类。下面是一个函数模板的例子:


template <typename T>
T max(T x, T y) {
    return (x > y) ? x : y;
}

在上面的例子中,我们定义了一个模板函数 max,它可以用于比较两个同类型的数据,并返回其中较大的值。模板参数 T 表示要比较的数据类型,在函数体中,我们可以像使用普通函数一样使用 T 类型的变量,这样就将通用代码与特定的数据类型解耦开来。
对于类模板,也可以按照类似的方式来定义,例如:

template <typename T>
class Stack {
 private:
   T* elements;
   int size;
 public:
   Stack(int n) : size(n), elements(new T[n]) {}
   void push(T const& elem) { /* ... */ }
   T pop() { /* ... */ }
};

在上述例子中,我们定义了一个模板类 Stack,它用于创造一个通用的堆栈数据结构。与函数模板一样,模板参数 T 可以被用于类中的函数、变量等地方来表示数据类型。
总体来说,C++ 模板为程序员提供了非常强大的编程工具和技术手段,尤其是在创建通用库和算法时,可大大提高代码的复用性和可读性,同时也去除了代码的冗余,节约了编码的时间。

C++的模板是不是像C#中的泛型?

是的,C++ 的模板与 C# 的泛型有很多相似之处。实际上,C# 的泛型部分就是受到了 C++ 模板的启发。下面是一些两者之间的相似之处:

  1. 参数化:C++ 模板和 C# 泛型都允许参数化类型,这意味着允许编写一些通用的代码,使之能够适用于不同的数据类型。
  2. 反省机制:C++ 模板和 C# 泛型都使用反省(reflection)机制,允许编译器在编译时生成特定的代码,而不是在执行时根据参数生成代码。
  3. 安全性:C++ 模板和 C# 泛型都提供了类型安全,可以预先规定类型,从而减少程序员在程序开发过程中可能引发的类型错误。
  4. 通用性:C++ 模板和 C# 泛型都允许在常规的数据类型和自定义类型上使用。
    当然,两者也有一些不同之处。首先,C++ 模板是一种更底层的机制,它可以非常细粒度地控制生成的代码,并提供了更大的灵活性。其次,C++ 模板中有一些语法和细节问题需要注意,例如 typename 关键词和非类型形参的使用。
    综上所述,尽管 C++ 模板和 C# 泛型有许多相似之处,但它们仍然是两种不同的技术,每种技术都有其优缺点,可根据需要来选择。

标签:函数,个人,C#,数据类型,笔记,C++,泛型,模板
From: https://www.cnblogs.com/MinervaZhang/p/17215916.html

相关文章

  • 爬进公司的个人工作面板,实时显示任务数和缺陷数
    公司的任务和缺陷提交用的第三方的BS系统,经常的任务布置了好几天才看到,这可不行。最近学了Python,写了个爬虫,爬进个人工作面板,实时的显示任务数,缺陷数,和大体的任务缺陷描......
  • 操作系统学习笔记(二)
    操作系统接口什么是操作系统接口?系统调用。POSIX:PortableOperatingSystemInterfaceofUnix(IEEE制定的一个标准族)分类POSIX定义描述任务管理fork创建一个......
  • Spring笔记_动态代理
    AOPTarget目标对象Proxy代理目标对象中的方法产生结果代理类joinpoint连接点被拦截的方法(可以被增强的方法)Pointcut切入点jointPoint中已经增强的为切入点......
  • TypeScript 学习笔记 — infer 类型推导、类型兼容 (九)
    目录1.ReturnType返回值类型2.Parameters参数类型3.InstanceType实例类型4.ConstructorParameters构造函数参数类型5.infer实践更改元组类型将元组转换成联合类型获取......
  • 数据结构笔记
    数据结构笔记二叉树遍历方式:前序遍历:打印-左-右中序遍历:左-打印-右后序遍历:左-右-打印Pair头文件:#includepair<类型1,类型2>变量名;pair<int,int>a(......
  • openwrt通过USBmodem收发SMS笔记(未完成)
    1、安装包:kmod-usb-serialkmod-usb-serial-optionusb-modeswitchusbutils2、USB口的打开、关闭https://openwrt.org/docs/guide-user/hardware/usb.overviewOn:echo......
  • win11笔记本插入鼠标关闭触摸板设置
     任务栏空白处右键,选择“任务栏设置”。 找到右侧蓝牙和其他设备,点击触摸板   去掉这个勾 ......
  • GO语言学习笔记-测试篇 Study for Go ! Chapter ten- Test
    持续更新Go语言学习进度中......GO语言学习笔记-类型篇StudyforGo!Chapterone-Type-slowlydance2me-博客园(cnblogs.com)GO语言学习笔记-表达式篇Study......
  • N8 开发电路板 - 使用 和 笔记
    N8电路,N58的使用和笔记1.学习电路,官方提供的封闭电路。N58有192pin。《硬件设计指南》中有详细说明  02_N58模块电路N58引脚:3部分天线3根:ANT_MAIN、ANT_GNSS、AN......
  • C++_一些重要的编译参数
    1.-g编译带调试信息的可执行文件#-g告诉g++产生可供GDB使用的调试信息。g++-gtest.cpp-otest2.-O[n]优化源代码-O:同时减小代码的长度和执行时间,其效果等价于......