- 博客(14)
- 收藏
- 关注
原创 C++20学习笔记——头等函数(Lambda闭包)
上述代码定义了一个函数指针,它可以储存参数为long和int、返回值为long的函数地址。但要注意的是不能将包括了fun_ptr的圆括号去掉,如果去掉该语句将被解释为返回long指针类型的函数。这样,我们就可以将fun_ptr指向任何与type_name拥有一样类型的参数与返回类型的函数了。以下写法与上述效果等效;故而很多人建议始终添加取址运算符,因为这样能够增加代码的可读性。double[ ]() {很奇怪是吧,我们同时使用了三种数学上的括号。
2023-06-07 20:51:31
304
原创 C++20学习笔记——类模板
/类成员 };完整的类模板特化是类定义而不是类模板。生成类模板特化实例时,不是使用类模板,而是使用为该类型定义的特化。类模板完整特化不需要和原模板完全相同,你可以把它当成和原模版同名的一个特例来使用。注:千万不要去特化函数模板,而应该使用函数重载。但相反的是,类模板的特化是相当安全的。
2023-05-07 11:16:14
182
原创 Python速通(不涉及模块与文件)
本文为本人为学习tensorflow时速通python的笔记,并不适用所有人,建议读者起码拥有C、C++、C#、Java中任意一门语言的基础
2023-04-27 20:03:18
154
原创 C++20学习笔记——部分多态
在基类中声明为virtual的函数在从基类(直接或间接)派生的所有类中都是虚函数。在派生类中,无论是否把函数指定为virtual,它都是虚函数。
2023-04-25 17:00:44
104
原创 C++20学习笔记——多态之纯虚函数
通过定义了Vessel类作为接口,我们可以将其他任意的类声明为Vessel类的派生类来引入接口,Vessel接口的作用就是提供了volume函数的声明,我们可以在派生类中定义它自己需要的volume,让volume在不同的类中做不同的事情。myClass不能被编译,因为它并不“完整”,可以理解为它的show函数没有被定义所以无法被编译,我们不能从函数中返回一个myClass对象,但是可以返回myClass*与myClass&因为这是实现多态的必要操作。
2023-04-25 16:58:16
76
原创 C++20学习笔记——运算符重载
现在通过编译后我们便能得到(3, 3)的span3向量了,我们看向函数重载的定义,mySpan mySpan::operator+(const mySpan& InSpan),在 operator前加一个mySpan的限定符是必要的,这使得函数实际上成为mySpan类的成员,以便于我们访问权限为 private的 x和 y。
2023-04-25 16:57:26
125
原创 C++20学习笔记——智能指针
智能指针就是帮我们C++程序员管理动态分配的内存的,它会帮助我们自动释放new出来的内存,从而避免内存泄漏!记住添加 memory模块。
2023-04-25 16:56:08
136
原创 C++20学习笔记——函数模板template
观察以下代码:我们明显发现print()函数之间的差别只是传入的参数不同,但使用了三次重载来实现,这样的代码复用性低,被视为是垃圾代码,怎么优化呢?这时候我们引入template关键词来实现以上操作实现了第一次编写代码的效果,所以我们可以理解为我们将a的类型变成了可变的量,让编译器自己去判断输入的数据属于什么类型。并且在代码底层逻辑里,print函数并不是真正的函数,它只有在被调用时才会被创建出来以供使用。当然,你也可以显式地表示函数的模板:注:将template< typename T >的ty
2023-04-25 16:55:30
78
原创 C++20学习笔记——运算符重载与深拷贝
关于"<<“和”>>"的重载用实现string类来说明深拷贝在类中运用指针时我们得小心一件事:当你需要拷贝一个对象时指针本身会被拷贝但不会拷贝指针指向的空间,也就是,p1与p2指向的是同一块空间!p2指向的不是属于自己类内的元素而是p1的.输出:然后报错了!是的,根据上面的描述我们可以知道,s2在最后也释放了一次m_name,但鉴于s1和s2的m_name都是指向的同一个地址,那么就代表同一个空间被释放了两次!当然这是不合理的,所以抛出了内存管理错误.那么,接下来我们将通过深拷贝来解决这个
2023-04-25 16:53:57
189
原创 C++20学习笔记——vector
需添加 vector模块vector是一个十分强大的序列容器,它不是一个向量,也属于一种数组,但它的长度不受限制,它会在需要更多空间时在内存开辟更大的空间将旧的vector拷贝过去然后删除旧的vector,以下是其声明的一个例子:与a[]和array不同,vector总是会初始化元素为0,当然你可以自己设置初始化数值在C++17以后,同 array一样可以不说明类型直接初始化,模板会自动判断数据类型:这里需要提醒以下语法的运用:vector继承了array的所有优点1.at() 函数2.si
2023-04-25 16:52:48
200
1
原创 C++20学习笔记——span
需要添加 span模块注:这是C++20的新特性std::span< T >类模板允许引用任何T值的连续序列(std::vector< T >、std::array< T >甚至原始数组a[ ])同时,我们会发现在std::array< T >作为函数的参数传入时的声明始终需要带上array的大小,这是一个十分不便的事,而std::span< T >很好地避免了这个问题。但是,当你传入std::span< T >的类型为T或者const T。
2023-04-25 16:51:32
375
1
原创 C++学习笔记——format
基本格式:format(填充与对齐(可选) 符号(可选) #(可选) 0(可选) 宽度(可选) 精度(可选) L(可选) 类型(可选))上述代码区别在于中括号内是否加入f关键字,也就是说若{:.2}则指保留两位有效数字,{:.2f}则表示保留小数点后两位,但需要注意的是,数据类型不能是整形6指预留6个单位的空间用于输出,默认空格补齐,< > ^ 分别意为左对齐,右对齐,居中,系统默认为右对齐。
2023-04-25 16:48:10
532
3
原创 C++20学习笔记——Array
需添加 array 模块翻译一下就是array<数据类型,大小> 数组名,以下是一个合法的命名从C++17开始,可以使用下列方式进行声明编译器可以通过花括号来判断array的类型,但需注意花括号内的值必须类型相同并且不能为空使用fill()函数可以填满arrayvalues将会被整数2333填满使用size()可以查看array的元素个数,返回size_t类型,并且array总会知道自己含有多少元素。
2023-04-25 16:47:36
85
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人