C++
难选昵称
独学而无友,孤陋则寡闻。学而不思则罔,思而不学则殆。
展开
-
CAS实现实现无锁机制
无关紧要的话因为最近要考虑实现一种无锁的hashmap,面对多线程操作并发执行时可能出现的不一致问题,所以特意学习了一下CAS,也算是有所得吧。正文1.什么是CAS?有的时候我们想进行一系列操作,而这不是原子性的,在多线程环境下,就很有可能会出现不一致的情况,举个栗子:比如我们想进行counter++(假设其初始值为0)操作,如果是单线程,则执行流程大概如下:取得count...原创 2019-11-12 11:23:35 · 568 阅读 · 0 评论 -
c++中四种 cast 转换
C++ 同时提供了四种新的强制转型形式(通常称为新风格的或 C++ 风格的强制转型):const_cast(expression) dynamic_cast(expression) reinterpret_cast(expression) static_cast(expression)每一种适用于特定的目的:const_cast 一般用于强制消除对象的常量性。它是唯一能...原创 2019-04-10 10:39:30 · 227 阅读 · 0 评论 -
c++ primer 第五版 阅读笔记七
第6章 分支语句和逻辑操作符6.3 字符库函数 cctype6.4 ? : 操作符6.5 switch 语句6.6 break 和 continue 语句这一节真的真的很重要,因为有的时候我们的程序到这个地方就该结束了,或者说程序的出口不止一个。之前有在递归等章节写过break; 这里再来仔细的整理一下。我是这么记得:break...原创 2019-04-01 21:23:06 · 210 阅读 · 0 评论 -
string 与 vector
类型名 定义 类型 初始化 c++11新特性 string 可变长度的字符型序列 类 1.string str1; //默认初始化,str1是一个空字符串; 2.string str1(str2); //str1是str2的副本; 3.string str1 = str2; //str1是副本;等价于2形式; 4....原创 2019-04-12 11:35:14 · 1837 阅读 · 1 评论 -
c++ primer 第五版 阅读笔记八
第七章 函数——C++的编程模板7.12 编程练习#include <iostream>using namespace std;inline double TAve(double x,double y){ double t_ave = 0; t_ave = 2.0 * x * y /(x + y); return t_ave;}in...原创 2019-04-09 16:50:33 · 134 阅读 · 0 评论 -
c++ primer 第五版 阅读笔记九
第八章 函数探幽8.2 引用变量8.2.1 创建引用变量8.8.2 将引用用作函数参数8.2.4 将引用用于结构之前,如果我们想将一个结构体作为实参传入一个函数,我们只能选择将其地址传入,然后通过一个同结构体类型的指针来接收,通过对指针的操作,实现对原有结构体的修改。现在,我们有了另一种方法,通过引用,可以实现将现有的结构体作为实参,函数的形参以引用...原创 2019-04-09 22:03:00 · 216 阅读 · 0 评论 -
C++ 单链表的实现
链表的好处在于其插入和删除的时间快,但是其遍历是短板。1.创建一个结点struct ListNode{ int m_nValue; ListNode* m_pNext;};为了更方便的使用Node类型,可以通过 typedef 标识符进行重命名:typedef struct ListNode{ int m_nValue; ListNode*...原创 2019-06-04 20:38:34 · 165 阅读 · 0 评论 -
二分法
理解原理:如何将一个问题,可以将规模为n的问题,通过O(1)的时间,变成规模为n/2的问题。表达式:T(n)= T(n / 2) + O(1) = O(logn)。,当输入规模n = 8时,x = 3,代表8除3次2等于1。问题:如何得到O(logn)?解答:T(n)= T(n / 2) + O(1)= T(n / 4) + O(1)+O(1)=T(n / 8) + O(1)+...原创 2019-07-09 10:55:06 · 462 阅读 · 0 评论 -
c++字符串题目
1.将阿拉伯数字转成中文数字,例如,输入字符串”我爱12你好34”,输出”我爱一二你好三四”(知识点:汉字及数字的替换)#include <iostream>#include <string>using namespace std;char* changeNumberToHanZi(string s,int length){ int n = 0; fo...原创 2019-06-28 15:53:46 · 841 阅读 · 1 评论 -
c++符号表的作用、继承方法、多态
问题1:如何通过变量名知道其地址?在引用的时候,我们知道那是nickname,那么两个变量,如何知道对应同一地址空间?答:网上搜了几篇博客,有一篇讲的不错,推荐给大家:http://lishicongli.blog.163.com/blog/static/1468259020115154859706/。摘录其中比较关键的点:编译器会生成一个叫做“符号表”的数据结构来维护变量名和内存地址直...原创 2019-07-09 21:24:33 · 2921 阅读 · 0 评论 -
C++Linux变量在虚拟内存中存放情况
问题1:Linux变量在虚拟内存中存放位置,数组呢?BSS段:BSS段(bss segment)通常是指用来存放程序中未初始化的全局变量的一块内存区域。BSS是英文Block Started by Symbol的简称。BSS段属于静态内存分配。数据段:数据段(data segment)通常是指用来存放程序中已初始化的全局变量的一块内存区域。数据段属于静态内存分配。代码段:代码段(cod...原创 2019-07-11 09:58:31 · 284 阅读 · 0 评论 -
递归问题
前记:说会写递归的是神,写迭代的是人。虽然不想当神,但还是题目它不允许呀,只能乖乖学习递归。本博客的内容学习自bilibili:https://www.bilibili.com/video/av43466895?from=search&seid=13312556908231953217递归的三个步骤:1.递归函数的意义及参数和返回值2.递归公式3.递归函数的结束条件,即...原创 2019-07-05 22:07:00 · 279 阅读 · 0 评论 -
c++智能指针
前言本文转载自:https://www.cnblogs.com/wuyepeng/p/9741241.html。正文本文介绍c++里面的四个智能指针: auto_ptr, shared_ptr, weak_ptr, unique_ptr 其中后三个是c++11支持,并且第一个已经被c++11弃用。为什么要使用智能指针:我们知道c++的内存管理是让很多人头疼的事,当我们写一个new语...转载 2019-07-11 21:54:27 · 162 阅读 · 0 评论 -
对结构体元素进行排序
知识点一:sort()sort()函数的头文件是algorithm,又被称为快速排序。其使用形式为:sort(start_address, end_address, [rule])我们在使用简单的对数组元素或是字符串排序的时候,第三个参数往往是省略的,代表你的排序规则默认是从小到大排序,当然也可以带参数,那么就可以通过用系统的排序规则sort(a,a+7,less<int>(...原创 2019-07-23 20:58:51 · 8877 阅读 · 0 评论 -
c语言和c++的区别
C是一个结构化语言,如谭老爷子所说:它的重点在于算法和数据结构。C程序的设计首要考虑的是如何通过一个过程,对输入(或环境条件)进行运算处理得到输出(或实现过程(事务)控制)。而对于C++,首要考虑的是如何构造一个对象模型,让这个模型能够契合与之对应的问题域,这样就可以通过获取对象的状态信息得到输出或实现过程(事务)控制。所以C与C++的最大区别在于它们的用于解决问题的思想方法不一样。之...原创 2019-04-10 10:28:24 · 279 阅读 · 0 评论 -
c++ primer 第五版 阅读笔记四
第四章 复合类型4.1 数组数组的声明:关于数组的内容写了蛮多的,包括一维数组和二维数组的创建、调用、返回等等,甚至用到了static和new/delete关键字,详见:(一维数组相关内容)https://blog.csdn.net/qq_26949665/article/details/88664929 和 (二维数组相关内容)https://blog.csdn.net/q...原创 2019-03-24 10:40:48 · 187 阅读 · 0 评论 -
排序算法整理
一、低级排序1. 插入排序(低级排序中速度最快的方法)类似于打扑克牌时自己拿牌:首先摸到第一张牌,那么默认是有序的,接着第二张牌过来,那就将其与其前的第一张牌进行比较,如果大于,那就放在第二个位置;如果小于,那就将第一张牌向后移一个位置,空出第一个位置,给这张新牌。当在来一张新牌的时候,我们就在进行类似于之前的比较工作,如果小于,就挪位置,大于就放后边。直至拿到所有的牌。#inclu...原创 2019-03-26 11:25:10 · 256 阅读 · 0 评论 -
C/C++知识点整理二
4.inline 内联函数内联函数:函数的引入可以减少程序的目标代码,实现程序代码的共享。但是,函数调用也需要一些时间和空间方面的开销,因为调用函数实际上将程序执行流程转移到被调用函数中,被调用函数的程序代码执行完后,再返回到调用的地方。这种调用操作要求调用前保护现场并记忆执行的地方,返回后恢复现场,并按原来保存的地址继续执行。对于较长的函数这种开销可以忽略不计,但是对于一些函数体代码很短...原创 2019-03-15 17:41:15 · 105 阅读 · 0 评论 -
c++ primer 第五版 阅读笔记三
第三章 处理数据 知识点提炼: 1. 内置C++类型:基本类型(整数和浮点数);复合类型(数组、字符串、指针、结构)。2. C++命名规则:3. 系统中整数的最大长度,可以通过C++ 工具来检查类型长度。首先,sizeof操作符返回类型或变量的长度,单位是字节。其次,头文件climits中包含了关于整型限制的信息(具体而言,就是它定义了表示各种限制的符号名称,例如:INT...原创 2019-03-20 11:31:17 · 254 阅读 · 0 评论 -
C/C++知识点整理三
5.volatileVolatile,词典上的解释为:易失的;易变的;易挥发的。那么用这个关键词修饰的C/C++变量,应该也能够体现出”易变”的特征。大部分人认识Volatile,也是从这个特征出发,而这也是本文揭秘的C/C++ Volatile的第一个特征。Volatile:易变的在介绍C/C++ Volatile关键词的”易变”性前,先让我们看看以下的两个代码片段,以及他们对应的汇...转载 2019-03-17 11:45:31 · 499 阅读 · 0 评论 -
C/C++知识点整理四
6.assert()断言,是宏,而非函数。assert 宏的原型定义在<assert.h>(C)、<cassert>(C++)中,其作用是如果它的条件返回错误,则终止程序执行。可以通过定义NDEBUG来关闭 assert,但是需要在源代码的开头,include <assert.h>之前。使用assert的缺点是,频繁的调用会极大的影响程序的性能,...原创 2019-03-17 17:12:49 · 223 阅读 · 0 评论 -
c++ primer 第五版 阅读笔记五
编程练习:只言片语:之前那篇博客内容写的有点多,避免大家看起来太心累,于是我把第四章的编程练习,单独整理一篇出来,加油,我们都是最胖的~ya。每当我真的感觉自己敲不下去了的时候,我就会提醒自己为什么开始,想怎么结束,便有了力量,愿我们在远走越顺,越走越远。回顾之前的一个知识点:对于数组而言:我们在使用 cin 时,只能读到一个词,于是我们使用 getline(arr1,ar...原创 2019-03-24 20:18:11 · 198 阅读 · 0 评论 -
《剑指offer》第2.3节 数据结构二
2.3.1 数组——二维数组题目2. 二维数组中的查找二维数组的声明: 数据类型 数组名 [行数][列数] 二维数组的初始化:①int array1[3][2]={4,2,5,6};//顺序初始化:按照先从左向右再由上而下地初始化,即第一行所有元素都初始化好以后再对第二行初始化。② int array2[3][2]={{4,2},{5},{6}};//按行初始化:用一对大括号来...原创 2019-03-21 19:23:05 · 112 阅读 · 0 评论 -
c++ primer 第五版 阅读笔记六
第五章 循环和关系表达式书写规范:for ( A ;B ;C)C++ 中通过 cout 来实现格式输出,就类似于C语言中通过 printf() 来实现格式输出。cout.setf() 的作用是通过设置格式标志来控制输出形式,比如:#include <iostream>using namespace std;int main(){ bool a...原创 2019-03-25 10:45:27 · 153 阅读 · 0 评论 -
c++ primer 第五版 阅读笔记一
第一章 预备知识 知识点提炼 1. C语言----->结构化编程 C++----->面向对象编程2. C++系统中编程步骤:3. linux编译和链接① linux系统中最常用的编译器是g++,这是来自Free Software Foundation的GNU C++编译器。linux的多数版本都包含该编译器,但并不一定总是安装它。g++编...原创 2019-03-19 09:28:00 · 315 阅读 · 0 评论 -
c++ primer 第五版 阅读笔记二
第二章 开始学习C++ 知识点提炼: 1. C++ 对大小写敏感。2. 文件扩展名cpp是一种表示C++ 程序的常用方式。3. C++ 的输入输出:① 输入:cin>>x;输出:cout<<x;头文件:#include <iostream>② 输入:scanf("%d",&x);输出:printf("%d",x);头文件:#...原创 2019-03-19 10:26:45 · 236 阅读 · 0 评论 -
红黑树
红黑树:注意:对于红黑规则3而言,如果节点是黑色的,则其子节点可以是红色也可以是黑色的。 为什么需要红黑树? 答:因为普通的二叉查找树会不平衡,甚至可能会退化为一个链表,如图所示:但是链表的查找性能很差,我们希望一种数据结构在外面插入的时候可以动态的调整,使得左右子树高度相差不大,所以引出了红黑树。 C++ 已经提供了红黑树的模板类:#include <set...原创 2019-03-29 15:37:30 · 146 阅读 · 0 评论 -
栈、堆
五、栈设计方式两种:1. 顺序栈:通过数组实现; 2. 链式栈:通过链表实现。 栈的特点:LIFO 先进后出 / FILO 先进先出 栈的操作:Push Top Pop IsEmpty六、堆堆的分类:注意和二叉搜索树的区别:大顶堆不分左右大小,只要根是最大的,任何一个儿子都比它小,任何一个孙子小于其父亲(也就是当前结点的儿子)更小于祖父(图里的根结点),就是大根...原创 2019-03-29 16:33:39 · 156 阅读 · 0 评论 -
二叉搜索树
实现方式一:BSTree.h#ifndef BSTREE_H_INCLUDED#define BSTREE_H_INCLUDED#include <iostream>#include <deque>#include <stdio.h>using namespace std;class BSTNode{public: int ...原创 2019-03-29 17:19:36 · 153 阅读 · 0 评论 -
哈希
查找的速度:哈希是O(1)原创 2019-03-29 17:47:10 · 346 阅读 · 0 评论 -
C/C++ const、this、static
一、关键字1.const作用:修饰变量,说明该变量不可以被改变; 修饰指针,分为指向常量的指针和指针常量; 常量引用,经常用于形参类型,即避免了拷贝,又避免了函数对值的修改; 修饰成员函数,说明该成员函数内不能修改成员变量。样例:/*eg1: 1. const修饰常量;2. const修饰指针*/#include <iostream>using nam...原创 2019-03-14 19:25:34 · 240 阅读 · 0 评论