c++、STL
David 's blog
这个作者很懒,什么都没留下…
展开
-
【C++】c和c++区别/辨析各种const /c++中引用c
原创 2019-01-06 21:37:06 · 154 阅读 · 0 评论 -
【面经总结c/c++】引用和指针的区别?用引用传参有哪些好处?
(参考《程序员面试宝典》)1.非空区别:在任何情况下都不能使用指向空值的引用。一个引用必须总是指向某些对象。因此如果你使用一个变量并让它指向一个对象,但是该变量在某些时候可能不指向任何对象。这时你就应该声明该变量为指针,因为这样你就可以赋空值的。相反,如果变量肯定指向一个对象,并且设计不允许变量为空,这时就把变量声明为引用。这意味着,使用引用的效率比使用指针高。2.合法性区别:在使...原创 2019-04-15 11:20:05 · 1838 阅读 · 0 评论 -
【c++】函数调用过程,4种调用约定
一、什么是栈1.定义:栈:数据结构中的栈,是一个容器,先进后出的属性;计算机系统中,栈是具有以上属性的动态内存区域,程序将数据压入栈,也可以从栈顶弹出,压栈使栈增大,出栈使栈减小,栈总是向下增长(由高地址向低地址);如图4G虚拟地址空间布局:ZONE_DMA的范围是0~16M,该区域的物理页面专门供I/O设备的DMA使用。之所以需要单独管理DMA的物理页面,是因为DMA使用物理...原创 2019-07-19 12:08:25 · 1013 阅读 · 0 评论 -
【c++】const
零、前言关于const,目前让我对这个知识点分类,我会分为:c语言中的const;c++中的const、c++中类的成员函数的const一、C语言中的const1.c语言中,const修饰的是常变量;常变量只有一个特点:不可以做左值。也就是不可以放在等号左边。想了一下,不做左值这是一条语法规则,在编译时期检查出,所以但凡放在=左,编译器就会报错。如图:其他特性和普通变量一样。所...原创 2019-07-20 21:14:47 · 261 阅读 · 0 评论 -
【C++】模板
零、前言:看《STL源码剖析》这本书,发现到处是模板的影子。之前一直没怎么看模板,对它恨不熟悉,这台影响看书进度了。工欲善其事必先利其器!模板主要以下知识点:/* 模板 1.函数模板 1.函数模板 2.模板实例化 3.模板函数 4.模板的实参推演 5.模板的特例化 特例化版本 > 模板版本 2.类模板 函数模板 ...原创 2019-07-27 17:14:19 · 194 阅读 · 1 评论 -
【c++】简单实现vector中的迭代器
零、前言最近几天,真的是和迭代器干上了.......这篇博客,通过简单实现vector中的迭代器,了解迭代器的机制一、迭代器的设计思想:为什么要有迭代器?答:迭代器模式(Iterator ):提供一种方法顺序访问聚合对象中的每个元素,而不是暴露其内部表示。要访问容器对象就要涉及要遍历算法,我们可以将遍历算法封装在容器中,但是这样的话容器类就承担了太多的功能,容器不仅要维护自...原创 2019-07-27 19:45:40 · 2556 阅读 · 3 评论 -
【c++】STL源码剖析:迭代器与traits编程技巧
参考书籍《STL源码剖析》STL主要学以下几部分:一.容器 1.顺序容器 vector list deque 2.关联容器 红黑树 BST set multiset map multimap //观察者模式 3.容器适配器 deque stack queu...原创 2019-07-27 15:29:24 · 299 阅读 · 1 评论 -
【STL】map中find的用法、map的insert插入:pair make_pair
用find函数来定位数据出现位置,它返回的一个迭代器,当数据出现时,它返回数据所在位置的迭代器,如果map中没有要查找的数据,它返回的迭代器等于end函数返回的迭代器,程序说明#include <map>#include <string>#include <iostream>Using namespace std;Int main(){...转载 2019-09-02 11:10:45 · 1729 阅读 · 0 评论 -
【STL】set
//最近刷题,用到了两次set,觉得真的是太好用了。一次在笔试中用到,感觉真是个骑兵,现在做题太依赖STL了。//一直不太清楚set和map的区别,今天一定好好看看setset是一种关联式容器,其特性如下:set以RBTree作为底层容器 所得元素的只有key没有value,value就是key 不允许出现键值重复 所有的元素都会被自动排序 不能通过迭代器来改变set的值,...原创 2019-09-03 18:34:02 · 175 阅读 · 0 评论 -
【STL】vector申请二维数组
参考了两篇博客:https://blog.csdn.net/baidu_31818237/article/details/52080920 https://blog.csdn.net/u010159842/article/details/51325185一、参考一做题的时候想当然了,申请二维数组直接这样写:vector<vector<int> > v...原创 2019-09-04 10:39:27 · 1058 阅读 · 0 评论 -
【面经总结c/c++】C++的重载是怎么做的?
函数重载:C++ 允许多个函数拥有相同的名字,只要它们的参数列表不同就可以,这就是函数的重载(Function Overloading)。借助重载,一个函数名可以有多种用途。函数名称必须相同。 参数列表必须不同(个数不同、类型不同、参数排列顺序不同等)。 函数的返回类型可以相同也可以不相同。 仅仅返回类型不同不足以成为函数的重载。如何做到重载?C++代码在编译时会根据参数列表...转载 2019-04-15 10:48:10 · 428 阅读 · 0 评论 -
【面经总结c/c++】static关键字的几种用法和它的作用?静态成员方法为什么没有传this指针进去?
(我的天,又是static,第三次写关于static的东西,我很燃,还老被问。。。)(详情参考:https://blog.csdn.net/zDavid_2018/article/details/85414999 )(https://blog.csdn.net/zDavid_2018/article/details/88642102)回答这个问题,就从面向过程的static 和 面向...原创 2019-04-15 10:14:26 · 526 阅读 · 0 评论 -
C语言中面向过程的static和c++中面向对象的static
(好文章,终于弄懂了static这个关键字,虽然之前写过static的博客。)文章转载自:Caroline0071原文链接:https://blog.csdn.net/kerry0071/article/details/25741425数据成员可以分为静态变量、非静态变量两种。静态成员:静态类中的成员加入static修饰符,即是静态成员,可以使用类名+静态成员名访问此静态成...转载 2019-03-18 16:36:57 · 215 阅读 · 0 评论 -
【C++】单例模式中的析构函数
最近写完项目,正是一波总结的时候。项目中用到了大量的单例模式,然而本以为写的轻车熟路的代码,结果却问题重重,单例模式如何析构?单例模式中如何保证线程安全?如何加锁?锁要封装成单例类嘛?这个单例类构造出1个对象会不会有问题?阻塞住会不会后面上锁的功能无法正常使用?还是锁不用单例模式封装?构造锁的对象时加static??......不测试不知道,一测试一堆问题需要解决,好,从头开始看。----...原创 2019-04-02 16:23:23 · 4668 阅读 · 3 评论 -
【Linux】半同步半异步线程池
首先来复习一下什么是:阻塞、非阻塞、同步、异步阻塞:调用方在得到结果之前会一直等待;非阻塞:调用方在不能得到结果时,不会等待。打个比喻:David准备钓鱼回家买菜做饭。阻塞:钓鱼时一直守在鱼竿前等鱼上钩,就这样钓到鱼后去做别的事情。非阻塞:David抛出鱼竿后,没有鱼上钩,于是开始先买菜洗菜玩手机,鱼上钩后,再去处理鱼。同步:被调用方得到最终结果之后才返回给调用...原创 2019-04-02 17:30:43 · 299 阅读 · 4 评论 -
【面经总结c++】struct 和 union
面试管:c语言中struct和union的区别是什么?答:一、sizeof()求大小时;unioni联合体:联合表示几个变量公用一个内存位置, 在不同的时间保存不同的数据类型 和不同长度的变量。在操作不同的成员时,编译器依据不同的成员类型,按照不同的方式取值。内存分配大小与union中最大的一个数据类型相等。例如:typedef union { long i; int k[5]; ...原创 2019-04-12 12:53:50 · 481 阅读 · 0 评论 -
【面经总结c++】C里边已经有了malloc、free,C++中为什么还要有new和delete
面试官:讲区别(提示说比如说返回值呀)一、malloc free是库函数,头文件stdlib.h中 new delete是c++中的关键字1. malloc()函数1.1 malloc的全称是memory allocation,中文叫动态内存分配。原型:extern void *malloc(unsigned int num_bytes); 说明:分配长度为num_bytes字...转载 2019-04-12 13:08:17 · 845 阅读 · 0 评论 -
【面经总结c/c++】堆和栈的区别?大小限制?一般我们程序中,栈最多能开辟多大?堆呢?
要说堆、栈的区别,首先要有一个概念:一个进程的4G虚拟地址空间划分:(如图)整体上从低地址到高地址可以划分为:3G的用户空间和1G的内核空间。用户空间中:从低地址到高地址分别为:128M的不可以访问区;.text指令段;.data数据段;.bss数据段;... ;heap堆区(自低地址向高地址开辟空间);....;stack栈区(自高地址向低地址开辟空间);......-----...原创 2019-04-12 20:33:28 · 11471 阅读 · 0 评论 -
【C++】智能指针的思想与实现 auto_ptr scope_ptr share_ptr weak_ptr
一、背景简介为什么要有智能指针?因为c++没有自动回收机制,程序员手动new出的对象都需要手动的delete,在庞大的项目中,很难保证不出纰漏。我们知道对象的生成和销毁有析构函数(可以通过手动调用new)和构造函数(无需手动调用),所以智能指针就可以利用这个特性。简单总结,智能指针是一个栈对象,做的是指针的事情,指向堆上开辟的资源,在栈对象声明周期结束时,自动调用析构函数,释放堆上内存...原创 2019-04-30 21:56:19 · 471 阅读 · 1 评论 -
【面经总结c/c++】你了解面向对象思想吗?
面向对象简单的概括起来就是4个字:模拟现实,即编程环境下要模拟现实世界(编程是在计算机中反映世界)。那么为了模拟的更真实更贴切,就加入了抽象、封装、继承、多态的概念。这也是面向对象的几个特征。现实世界中,万事万物(桌子、砖、人、动物、植物······)都可以用通过两个概念去描述:1.它的属性 2.它的功能、作用比如一张书桌有属性:长宽高、材料······ 功能有:放东西,学习····...原创 2019-04-14 22:14:46 · 385 阅读 · 5 评论 -
【面经总结c/c++】你了解内存池的设计思想吗?
内存池是什么?内存池是一组资源的集合。程序在申请堆上的内存时,我们可以给它一大块内存(远超出程序要申请的大小,即内存池),并且自己管理,而不是它要多少就从切换到内核态,给它多少。为什么要设计内存池?两个原因:1.因为频繁的new/delete 用户态转内核态,效率低:因为物理内存是一个物理硬件,程序要从物理硬件上申请资源,要调用系统调用,要切换到内核态,还调用驱动······一系列操作;...原创 2019-04-14 22:51:13 · 823 阅读 · 0 评论 -
【c++】int 转string的两种方法 :to_string 、字符串流
第一种是to_string函数,这是C++11新增的,使用非常方便,简单查了下:C++11标准增加了全局函数std::to_string,以及std::stoi/stol/stoll等等函数(这几个就是string转int,long,以及long long啦~)to_string这个函数还是很强大的!string to_string (int val);string to_string ...转载 2019-09-15 17:35:56 · 470 阅读 · 0 评论