随笔分类 - C/C++
C/C++编程基础
摘要:1 定义 unordered_set本质是使用hash散列的方式存储数据,是一种使用hash值作为key的容器,所以当有频繁的搜索、插入和移除拥有常数时间。unordered_set存储原理是声明一个有n个桶的数据结构,计算加入到unordered_set的新的值hash,然后计算hash%n后的值
阅读全文
摘要:C++11线程库:原始的c++标准仅支持单线程编程,新的C++标准(C++11或C++110x)于2011年发布,引入了新的线程库。 编译器要求: Linux: gcc 4.8.1 (完全并发支持) Windows: Visual Studio 2012以上 and MingW 在linux下的编译
阅读全文
摘要:1 vector vector和数组类似,拥有一段连续的内存空间,并且起始地址不变;因此能高效的进行随机存取,时间复杂度为o(1);但因为内存空间是连续的,所以在进行插入和删除操作时,会造成内存块的拷贝,时间复杂度为o(n);另外,当数组中内存空间不够时,会重新申请一块内存空间并进行内存拷贝。 2
阅读全文
摘要:1 引用 C++是C语言的继承,它可进行过程化程序设计,又可以进行以抽象数据类型为特点的基于对象的程序设计,还可以进行以继承和多态为特点的面向对象的程序设计。引用就是C++对C语言的重要扩充。引用就是某一变量的一个别名,对引用的操作与对变量直接操作完全一样。引用的声明方法:类型标识符 &引用名=目标
阅读全文
摘要:动态链接库是程序运行时加载的库,当动态链接库正确部署之后,运行的多个程序可以使用同一个加载到内存中的动态库,因此在 Linux 中动态链接库也可称之为共享库。动态链接库是目标文件的集合,目标文件在动态链接库中的组织方式是按照特殊方式形成的。库中函数和变量的地址使用的是相对地址(静态库中使用的是绝对地
阅读全文
摘要:1.new是C++关键字,需要编译器支持;malloc是库函数,需要头文件支持。 2.使用new操作符申请内存分配时无须指定内存块的大小,编译器会根据类型信息自行计算。而malloc则需要显式地指出所需内存的大小。 3.new操作符内存分配成功时,返回的是对象类型的指针,类型严格与对象匹配,无须进行
阅读全文
摘要:Linux操作系统下要对C/C++程序进行调试,就必须在编译源文件时,使用-g参数,编译时使用的命令为(gcc -g test.c -o test)。 编译完成后,启动GDB调试工具,命名为:gdb + 要调试程序的程序名。GDB调试基本命令如下: 1 list/l 命令 可以使用list/l命令查
阅读全文
摘要:编写一个函数来验证输入的字符串是否是有效的 IPv4 或 IPv6 地址。 如果是有效的 IPv4 地址,返回 "IPv4" ; 如果是有效的 IPv6 地址,返回 "IPv6" ; 如果不是上述类型的 IP 地址,返回 "Neither" 。 IPv4 地址由十进制数和点来表示,每个地址包含 4
阅读全文
摘要:Valgrind memcheck是用于构建动态分析工具的探测框架。它包括一个工具集,每个工具执行某种类型的调试、分析或类似的任务,以帮助完善你的程序。Valgrind的架构是模块化的,所以可以容易地创建新的工具而又不会扰乱现有的结构。 许多有用的工具被作为标准而提供。 1.Memcheck是一个内
阅读全文
摘要:观察者模式(Observer),又叫发布-订阅模式(Publish/Subscribe):定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都要得到通知并自动更新。 观察者模式从根本上讲必须包含两个角色:观察者和被观察对象。 被观察对象自身应该包含一个容器来存放观察者对
阅读全文
摘要:单例模式顾名思义,保证一个类仅可以有一个实例化对象,并且提供一个可以访问它的全局接口。实现单例模式必须注意一下几点: 单例类只能由一个实例化对象。 单例类必须自己提供一个实例化对象。 单例类必须提供一个可以访问唯一实例化对象的接口。 单例模式分为懒汉和饿汉两种实现方式。 懒汉单例模式 懒汉:故名思义
阅读全文
摘要:策略模式是指定义一系列的算法,把它们单独封装起来,并且使它们可以互相替换,使得算法可以独立于使用它的客户端而变化,也是说这些算法所完成的功能类型是一样的,对外接口也是一样的,只是不同的策略为引起环境角色(持有一个策略类的引用,最终给客户端调用)表现出不同的行为。 相比于使用大量的if...else,
阅读全文
摘要:在工厂模式中,创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象。工厂模式作为一种创建模式,一般在创建复杂对象时,考虑使用;在创建简单对象时,建议直接new完成一个实例对象的创建。 简单工厂模式 简单工厂模式主要特点是需要在工厂类中做判断,从而创造相应的产品,当增加新
阅读全文
摘要:C++中multiset容器是STL模板<set>库中一个非常有用的类型,它可以看成一个序列,插入一个数,删除一个数都能够在O(logn)的时间内完成,而且他能时刻保证序列中的数是有序的,而且序列中可以存在重复的数(而set容器要求两两不同,且不保证有序)。 常用成员函数 insert(elem):
阅读全文
摘要:C++中的虚函数的作用主要是实现多态的机制。关于多态,简而言之就是用父类型别的指针指向其子类的实例,然后通过父类的指针调用实际子类的成员函数。这种技术可以让父类的指针有“多种形态”,这是一种泛型技术。所谓泛型技术,说白了就是试图使用不变的代码来实现可变的算法。 虚函数表 C++ 虚函数(Virtua
阅读全文
摘要:一般情况下,编写一个类一般将头文件(.h文件)和源文件(.cpp文件)进行分离。.h文件定义类和函数,.cpp文件中进行函数的实现, 然后提供给其他.cpp文件调用。但是在使用模板时,这种习惯性做法将变得不再有用,因为当实例化一个模板时,编译器必须看到模板确切的定义,而不仅仅是它的声明。 模板定义很
阅读全文
摘要:GCC编译器将源代码文件转换为可执行文件需要四个过程: 1.预处理(完成宏定义和include文件展开等工作) 将include包含的文件插入源文件 宏替换 根据条件编译选择要使用的代码 经过预处理后输出“.i”文件 2.编译(根据编译参数进行不同程度的优化,编译成汇编代码) 把c/c++文件“翻译
阅读全文
摘要:和 shared_ptr、unique_ptr 类型指针一样,weak_ptr 智能指针也是以模板类的方式实现的。weak_ptr<T>( T 为指针所指数据的类型)定义在<memory>头文件,并位于 std 命名空间中。因此,要想使用 weak_ptr 类型指针,程序中应首先包含<memory>
阅读全文
摘要:二叉查找树又称二叉排序树,它要么是空树,要么是具有下列性质的二叉树: 每个节点都有一个作为查找依据的关键码。所有节点的关键码互不相同; 若它的左子树不为空,则左子树上所有节点的关键码均小于根节点的关键码; 若它的右子树不为空,则右子树上所有节点的关键码均大于根节点的关键码; 它的左、右子树也是二叉查
阅读全文
摘要:C++ 11 模板库的 <memory> 头文件中定义的智能指针,即 shared_ptr 模板类,用来管理指针的存储,提供有限的内存回收函数,可同时与其他对象共享该管理功能,从而帮助彻底消除内存泄漏和悬空指针的问题。 shared_ptr 类型的对象能够获得指针的所有权并共享该所有权:一旦他们获得
阅读全文