C/C++
文章平均质量分 76
SJLin96
这个作者很懒,什么都没留下…
展开
-
三目运算符嵌套运算
a > b?1:a== b?0:-1;相当于if( a >b){ return 1;}else if(a== b){ return 0;}else { return -1;}转载 2018-07-22 15:23:05 · 3391 阅读 · 0 评论 -
C++中的<ctime>库
转自:C++ <ctime>(time.h)库笔记 以及简便计算日期差等 struct tm这个结构体有9个成员Member Type Meaning Range tm_sec int seconds after the minute 0-60* tm_min int minutes after the hour ...转载 2018-08-30 17:07:18 · 3006 阅读 · 0 评论 -
C++ STL之迭代器
一. 什么是迭代器?迭代器是STL中行为类似指针的设计模式,它可以提供了一种对容器中的对象的访问方法;并且它没有暴露容器中内部的表述方式。 例如STL中的map和set,它们的底层是一颗红黑树(一种平衡树),而当你用迭代器去对他们进行访问时,原本在红黑树中的二叉树结构却能转换成一种线性结构的访问方式,如上述例子。 也就是说,迭代器提供了一种一般化的方法对顺序或关联容器类型中的每个元素进行...原创 2018-08-23 15:45:39 · 684 阅读 · 0 评论 -
构造和析构函数调用顺序
参考文章:C++中构造函数与析构函数的调用顺序C++构造函数和析构函数的调用顺序 一. 理论1. 构造函数和析构函数①构造函数构造函数不能有返回值 缺省构造函数时,系统将自动调用该缺省构造函数初始化对象,缺省构造函数会将所有数据成员都初始化为零或空 创建一个对象时,系统自动调用构造函数②析构函数析构函数没有参数,也没有返回值。不能重载,也就是说,一个类中只可...原创 2018-08-21 11:26:05 · 13478 阅读 · 3 评论 -
C++ 静态数据成员
一. 定义和性质1. 定义类体中的数据成员的声明前加上static关键字,该数据成员就成为了该类的静态数据成员。 静态数据成员实际上是类域中的全局变量。所以,静态数据成员的定义(初始化)不应该被放在头文件中(而是在相应的cpp文件中)。//xxx.h文件class base{ private: static const int _i;//声明,标准c++支持有...转载 2018-08-21 22:59:45 · 6583 阅读 · 0 评论 -
C++运算符优先级
转自:C++运算符优先级转载 2018-09-01 22:54:12 · 126 阅读 · 0 评论 -
malloc、calloc、free和new、delete和memset、memcpy
一. malloc、calloc、freemalloc原型:void* malloc(unsigned int size) calloc原型:void* calloc(size_t numElements, size_t sizeOfElement) 两个函数返回值均为系统分配的地址,失败返回NULL malloc的参数size是需要内存空间的长度:char* p;p=(cha...原创 2018-09-03 10:10:01 · 1277 阅读 · 0 评论 -
C++ 的函数调用约定
函数调用约定,是指当一个函数被调用时,函数的参数会被传递给被调用的函数和返回值会被返回给调用函数。函数的调用约定就是描述参数是怎么传递和由谁平衡堆栈的,当然还有返回值。 在windows平台上的C++编程中经常会看到一些__stdcall, __cdecl, WINAPI, CALLBACK等等关键字在函数前面,在.NET中还有__clrcall, __thiscall等关键字,有时加...转载 2018-09-08 21:26:43 · 832 阅读 · 0 评论 -
《C和指针》 旧笔记迁移
目录No.01 快速上手No.02 基本概念No.03 数据No.04 语句No.05 操作符和表达式No.06 指针No.07 函数No.08 数组No.09 字符串、字符和字节No.10 结构和联合No.11 动态内存分配No.14 预处理器 No.01 快速上手#if 0 statements #endif 这段语句有删除中间...原创 2018-09-06 18:24:54 · 750 阅读 · 0 评论 -
友元
一. 为什么要有友元?C++控制类对象私有部分的访问,通常是由公有类提供唯一的访问途径,但有时候这种限制台严格。因此C++提供了友元,通过让函数成为类的友元,可以赋予函数和类成员函数相同的访问权限。 友元有:友元函数、友元类、友元成员函数。 假设有一个时间类Time,要定义时间类的乘法。我们先想到的是乘法,可以在类中重载运算符*。这样的话:A=B*2.75; //相当于:A=...原创 2018-09-07 09:53:45 · 111 阅读 · 0 评论 -
C字符串相关函数
一. strcpy 功能:拷备字符串函数,将src所指向的字符串拷备到dest所指向的内存空间中。复制包含’\0’。st 原型:char *strcpy(char *destin, char *source); 函数内部实现:char * strcpy(char *dst,const char *src) { assert(dst != NULL && sr...转载 2018-09-14 08:08:52 · 294 阅读 · 0 评论 -
C中 mem系列函数
1. memset原型:void* memset(void *s,int c,size_t n) 功能:将s的前n个字节用c替换并返回s 注意:memset赋值不管你数组是什么类型的,它都是以字节为单位赋值的。即使是int型,4个字节,也是逐个字节赋值。2. memcpy 和 memmove原型: void *memcpy(void*dest, const void *src, s...转载 2018-09-24 22:21:54 · 6645 阅读 · 0 评论 -
C/C++文件操作
一. fopen、fwrite、fread、fseek#include<stdio.h>1. fopen原型:FILE * fopen(const char * path,const char * mode); path是绝对路径,可以是绝对路径,也可以是相对路径。 Windows下绝对路径要这么写:"C:\\test\\test" mode有以下几种选择:r...原创 2018-09-11 11:21:22 · 944 阅读 · 0 评论 -
《Effective C++》 个人笔记
注: ①因为本书就是提供一些C++编程的建议,可能会有很多诸如“要”、“一定”之类的词语。其实很多不这么做并不会出错,只是这样写出的代码可能存在一些后续扩展等等问题。 ②以为本人是菜鸡一个,第一遍读很多还是没读懂,所以笔记也有遗漏0. 导读默认构造函数,要不就没有参数,要不就是每个参数都有缺省值。 在声明类的时候用=,调用的是拷贝构造函数;而在其他时候调用=,调用的是被重载的=运算符。...原创 2018-10-07 22:58:53 · 290 阅读 · 0 评论 -
《C陷阱与缺陷》学习笔记
C编译器判断符号的方式是“贪心法”,即一直读入下一字符,看能否组成一个符号,直到不可能组成一个符号为止。 单引号括起的一个字符表示一个整数,双引号括起的一个字符代表一个指针。float *g(); g是一个函数,该函数的返回值类型为指向浮点数的指针。 float (*h)(); h是一个函数指针,指向返回值是浮点数的函数。 分析(*(void(*)())0)(); : void...原创 2019-05-12 21:27:28 · 620 阅读 · 0 评论 -
C++ 线程同步
一. 实现线程同步的方式1. 临界区临界区(Critical Section)是一段独占对某些共享资源访问的代码,在任意时刻只允许一个线程对共享资源进行访问。如果有多个线程试图同时访问临界区,那么在有一个线程进入后其他所有试图访问此临界区的线程将被挂起,并一直持续到进入临界区的线程离开。临界区在被释放后,其他线程可以继续抢占,并以此达到用原子方式操作共享资源的目的。2. 事件(CEve...转载 2018-08-17 10:10:56 · 832 阅读 · 0 评论 -
《STL源码剖析》 笔记
实在有点难读下去,第一次读就读得比较粗糙了。第1章 概论与版本简介为建立数据结构和算法的一套标准,并且降低其间的耦合关系,以提升各自的独立性、弹性、交互操作性,C++社群里诞生了STL。 STL是一个抽象概念库,这些抽象概念包括: ①最基础的:可被赋值、不需要任何参数就可构造、可判断是否相同、可比较大小、正规。 ②高阶一点的:具输入功能的迭代器、具输出功能的迭代器、单向迭代器、双向迭代...原创 2018-08-26 21:42:51 · 206 阅读 · 0 评论 -
C++ 笔试、面试可能出的题
重载(overload)和覆盖(override)的区别? 1、从定义上来说: 重载:是指允许存在多个同名函数,而这些函数的参数表不同(或许参数个数不同,或许参数类型不同,或许两者都不同)。 覆盖:是指子类重新定义父类虚函数的方法。 2、从实现原理上来说: 重载:编译器根据函数不同的参数表,对同名函数的名称做修饰,然后这些同名函数就成了不同的函数(至少对于编译器来说是这样的...原创 2018-07-28 16:11:41 · 4394 阅读 · 0 评论 -
C++中智能指针和野指针
参考文章:C++中智能指针的设计和使用C++智能指针及其简单实现C++智能指针 shared_ptr,unique_ptr和weak_ptr【C++进阶】C++中的空指针和野指针 一. 简介1. 为什么要用智能指针?①忘记释放导致内存泄漏int main(){ int *ptr = new int(0); return 0;}②产生野指针...转载 2018-08-09 15:00:57 · 1651 阅读 · 0 评论 -
C++ STL学习笔记
一、简介STL(Standard Template Library),标准模板库,惠普实验室开发的一系列软件的统称。它是由Alexander Stepanov、Meng Lee和David R Musser在惠普实验室工作时所开发出来的。从根本上说,STL是一些“容器”的集合,这些“容器”有list,vector,set,map等,STL也是算法和其他一些组件的集合。这里的“容器”和算法的...原创 2018-07-31 15:44:08 · 383 阅读 · 0 评论 -
C++ STL之vector
一、简介vector是表示可变大小数组的序列容器。STL的vector每一次扩充容量时,新的容量都是前一次的两倍(VS测试并不是这样的)。 就像数组一样,vector也采用的连续存储空间来存储元素。也就是意味着可以采用下标对vector的元素进行访问,和数组一样高效。但是又不像数组,它的大小是可以动态改变的,而且它的大小会被容器自动处理。 本质讲,vector使用动态分配数组来存储它的元素...原创 2018-07-31 16:49:38 · 155 阅读 · 0 评论 -
C++ STL之map、multimap、hash_map、unordered_map
一. 简介map是STL 的一个关联容器,它提供一对一(其中第一个可以称为关键字,每个关键字只能在map中出现一次,第二个可能称为该关键字的值)的数据处理能力,由于这个特性,它完成有可能在我们处理一对一数据的时候,在编程上提供快速通道。 map内部自建一颗红黑树(一种非严格意义上的平衡二叉树),这颗树具有对数据自动排序的功能,所以在map内部所有的数据都是有序的,后边我们会见识到有序的好处。...原创 2018-07-31 18:42:21 · 879 阅读 · 0 评论 -
C++ STL之list、forward_list
一. 简介list是一种序列式容器。list容器完成的功能实际上和数据结构中的双向链表是极其相似的。 list中的数据元素是通过链表指针串连成逻辑意义上的线性表,也就是list也具有链表的主要优点,即:在链表的任一位置进行元素的插入、删除操作都是快速的。 list的实现大概是这样的:list的每个节点有三个域:前驱元素指针域、数据域和后继元素指针域。 前驱元素指针域保存了前驱元素的首地址...原创 2018-08-14 15:57:04 · 1163 阅读 · 0 评论 -
C++ STL之deque
一. 简介deque容器为一个给定类型的元素进行线性处理,像向量一样,它能够快速地随机访问任一个元素,并且能够高效地插入和删除容器的尾部元素。但它又与vector不同,deque支持高效插入和删除容器的头部元素,因此也叫做双端队列。deque类常用的函数如下。(和vector、和list对比) 二. 相关用法1. 构造函数deque():创建一个空dequedeque(in...原创 2018-08-14 16:09:00 · 182 阅读 · 0 评论 -
C++ STL之set
一. 简介set集合容器:实现了红黑树的平衡二叉检索树的数据结构,插入元素时,它会自动调整二叉树的排列,把元素放到适当的位置,以保证每个子树根节点键值大于左子树所有节点的键值,小于右子树所有节点的键值;另外,还得保证根节点左子树的高度与右子树高度相等。 平衡二叉检索树使用中序遍历算法,检索效率高于vector、deque和list等容器,另外使用中序遍历可将键值按照从小到大遍历出来。构造se...原创 2018-08-14 16:37:29 · 174 阅读 · 0 评论 -
C++11 新功能
一. 零碎新功能新类型: long long 和 unsigned long long,支持64位(或更宽)的整型。 char16_t 和 char32_t,支持16位和32位的字符表示。 列表初始化可以用于new表达式中: int *ar=new int[4] {2,4,6,7}; Stump s2{5,43.4}; //构造函数为:Stump(int r,doubl...原创 2018-08-15 16:24:08 · 182 阅读 · 0 评论 -
C++ STL之stack
一. 简介C++的STL中自带stack这种数据结构的实现。 C++ Stack(堆栈) 是一个容器类的改编,为程序员提供了堆栈的全部功能,也就是说实现了一个先进后出(FILO)的数据结构。 二. 一些使用方式1. 头文件#include <stack> 2. 成员函数empty() 堆栈为空则返回真pop() 移除栈顶元素(无返回值,如果需要的话先用t...原创 2018-08-13 22:46:09 · 207 阅读 · 0 评论 -
C++ STL之queue
一. 简介C++队列queue模板类的定义在<queue>头文件中,queue 模板类需要两个模板参数,一个是元素类型,一个容器类型,元素类型是必要的,容器类型是可选的,默认为deque 类型。C++队列queue是一种容器适配器,它给予程序员一种先进先出(FIFO)的数据结构。 二. 使用方法1. back() 返回最后一个元素queue<string...转载 2018-08-13 23:00:41 · 264 阅读 · 0 评论 -
C++ 多态和虚函数
一. 先搞清override overload overwrite的区别1. overload(重载)(不是多态)在C++程序中,可以将语义、功能相似的几个函数用同一个名字表示,但参数不同(包括类型、顺序不同),即函数重载。(1)相同的范围(在同一个类中);(2)函数名字相同;(3)参数不同;(4)virtual 关键字可有可无。2. override(覆盖)(运行时多态...原创 2018-08-16 14:40:04 · 6546 阅读 · 4 评论 -
sizeof 相关问题
一. sizeof的概念 sizeof是C语言的一种单目操作符,如C语言的其他操作符++、--等。它并不是函数。 sizeof操作符以字节形式给出了其操作数的存储大小。 二. 64位Linux系统中的sizeof(指针跟自己的系统有关,32位系统是4个字节,64位是8个字节)1、char : 1个字节(固定)2、*(即指针变量): ...原创 2018-07-22 11:46:21 · 379 阅读 · 0 评论 -
函数指针
一. 函数指针的声明方式1. 直接声明int (*add)(int a, int b);2. 先声明一个指针,后再把函数赋值给它int add(int a, int b);int (*p)(int, int);p=add;3. 调用p(1,2);(*p)(1,2); 二. 函数指针的数组1. *p[n] 和 (*p)[n]的区别*p[3]表示一...转载 2018-08-16 20:29:47 · 174 阅读 · 0 评论 -
《C专家编程》学习笔记
这不是Bug,而是语言特性。(手动斜眼) C中多行字符串可以自动合并为一个字符串,所以可以这么用: printf("This is ""a ""test."); 但这样,如果在初始化字符串数组时,如果忘记写逗号,也会被自动合并: char *strs[]={"one","two""three","four"}; 这段代码变成"one"、"twothree"、"four...原创 2019-05-21 12:50:44 · 256 阅读 · 0 评论