当前位置:首页 » 《我的小黑屋》 » 正文

【C++游记】不允许你不会内存管理、模板、STL

18 人参与  2024年12月05日 12:00  分类 : 《我的小黑屋》  评论

点击全文阅读


 

枫の个人主页

你不能改变过去,但你可以改变未来

算法/C++/数据结构/C

Hello,这里是小枫。C语言与数据结构和算法初阶两个板块都更新完毕,我们继续来学习C++的内容呀。C++是接近底层有比较经典的语言,因此学习起来注定枯燥无味,西游记大家都看过吧~,我希望能带着大家一起跨过九九八十一难,降伏各类难题,学会C++,我会尽我所能,以通俗易懂、幽默风趣的方式带给大家形象生动的知识,也希望大家遇到困难不退缩,遇到难题不放弃,学习师徒四人的精神!!!故此得名【C++游记】

 话不多说,让我们一起进入今天的学习吧~~~

 1>>内存管理

师傅不怕,这是小怪~~

        C内存管理的方式有malloc、calloc、realloc、free。而C++有自己的一套内存管理,那就是new和delete,它跟C的区别是什么呢?那就是在自定义类型上,在用new申请一块空间时,会自动调用自定义类型的构造函数,delete在释放空间时,会调用析构函数。

#include<iostream>using namespace std;void Test() {int* ptr1 = new int;//动态申请一块int类型的空间int* ptr2 = new int(1);//动态申请一块int类型的空间,初始化为1int* ptr3 = new int[5];//动态申请五块int类型的空间delete ptr1;delete ptr2;delete[] ptr3;}int main() {Test();return 0;}

new在底层调用operator new来申请空间的,而operator new是malloc的封装。 delete在底层调用operator delete来申请空间的,而operator delete是free的封装。

区别:

1.malloc和free是函数,new和delete是操作符

2.malloc申请空间不会初始化,new可以初始化

3.malloc申请空间需要手动计算大小,new只需要知道什么类型,它会自动计算大小,若多个对象,就在[]中指定对象个数即可。

4.前者不会调用构造与析构,而后者会调用。

 2>>模板

师傅不怕,也是小怪,今天都是小怪啦~~~

 

#include<iostream>using namespace std;template <class T>//这里可以写class,也可以写typenameT Add(const T& x, const T& y) {return x + y;}void Test() {int a = 1;int b = 2;double c = 3.3, d = 4.4;cout << " a= " << a << " b= " << b << " c= " << c << " d= " << d << endl;int sum1 = Add(c,d);//上面的T会根据传的类型进行变化,传int,T就是intcout << sum1 << endl;//当然也可以显示实例化double sum2 = Add<double>(c, d);cout << sum2<<endl;}int main() {Test();return 0;}

若是有一个模板,还有一个自己写的确定类型的函数,编译器会选择已经写好的,毕竟有现成就用现成的。用模板的话C++底层会先进行推演,直到找到匹配的类型,才会调用,对编译器来说,也是能偷懒就偷懒。 

3>>STL

        STL是C++标准库的重要组成部分,而STL里最重要的就是算法与数据结构,它是一个包含算法与数据结构的框架

算法包括find、swap、reserve、sort、merge等等

容器包括string、vector、list、deque、map、set、multimap、multilset等等

所以我们要学习它,它的重要性毋庸置疑。在面试中也包括它很多部分。这里先介绍,在之后的学习中我们慢慢学习它!!

 

4>>结语

        今日C++到这里就结束啦,如果觉得文章还不错的话,可以三连支持一下。感兴趣的宝子们欢迎持续订阅小枫,小枫在这里谢谢宝子们啦~小枫の主页还有更多生动有趣的文章,欢迎宝子们去点评鸭~C++的学习很陡,时而巨难时而巨简单,希望宝子们和小枫一起坚持下去~你们的三连就是小枫的动力,感谢支持~


点击全文阅读


本文链接:http://m.zhangshiyu.com/post/196861.html

<< 上一篇 下一篇 >>

  • 评论(0)
  • 赞助本站

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

关于我们 | 我要投稿 | 免责申明

Copyright © 2020-2022 ZhangShiYu.com Rights Reserved.豫ICP备2022013469号-1