C/C++
文章平均质量分 86
bryant-xw
Stay hungry, Stay foolish
展开
-
约瑟夫问题
约瑟夫问题约瑟夫问题是个著名的问题:N个人围成一圈,第一个人从1开始报数,报M的将被杀掉,下一个人接着从1开始报。如此反复,最后剩下一个,求最后的胜利者。例如只有三个人,把他们叫做A、B、C,他们围成一圈,从A开始报数,假设报2的人被杀掉。首先A开始报数,他报1。侥幸逃过一劫。然后轮到B报数,他报2。非常惨,他被杀了C接着从1开始报数接着轮到A报数,他报2。也被杀死了。最终胜利者是C解决方案普通解法刚学数据结构的时候,我们可能用链表的方法去模拟这个过程,N个人看作是N个链表节点,节点1指转载 2021-10-07 18:29:16 · 1625 阅读 · 0 评论 -
C++基本编程质量规范试题笔记——来自林锐博士《高质量编程指南》测试题
一、请填写 BOOL , float, 指针变量 与“零值”比较的 if 语句。(10 分)提示:这里“零值”可以是 0, 0.0 , FALSE 或者“空指针”。例如 int 变量 n 与“零值” 比较的 if 语句为: if ( n == 0 ) if ( n != 0 ) 以此类推。请写出 BOOL flag 与“零值”比较的 if 语句:if(!flag)if(flag)...原创 2019-08-12 17:09:15 · 505 阅读 · 0 评论 -
【设计模式】单例模式2
如果多线程下同时进入if(!onlystance)就有可能出现错误。所以显然是需要加入互斥锁的。class singleStance{ private : singleStance(); public : static singleStance* onlystance; static singleStance* getStance(){ lockBase* lockbase...转载 2019-08-19 15:58:54 · 98 阅读 · 0 评论 -
c++中字符串反转的3种方法
1.使用cstring头文件中的strrev函数#include <iostream>#include <cstring>using namespace std; int main(){ char s[]="hello"; strrev(s); cout<<s<<endl; return 0;}2.使用...转载 2019-08-01 23:39:23 · 1475 阅读 · 0 评论 -
【设计模式】单例模式
总结一下单例模式便于自己之后的复习1.懒汉模式【版本1:线程不安全】class Singleton{ private: Singleton(){} static Singleton* instance; public: int a; static Singleton* getInstance();};Sin...原创 2019-08-01 22:43:31 · 115 阅读 · 0 评论 -
C++ template 模板笔记记录
C++ template 模板笔记记录模板实例化:模板的定义本身不参与编译,而是编译器根据模板的用户使用模板时提供的类型参数生成代码,再进行编译,这一过程称为模板实例化一、 函数模板1.定义:就是把处理不同类型的公共逻辑抽象成函数,就得到了函数模板template<typename T>T cmp(const T& a, const T& b){ retu...原创 2019-08-08 10:48:26 · 274 阅读 · 0 评论 -
Volatile关键字
Volatile关键字1.编译器的优化(1)硬件上:由于内存访问速度远不及CPU处理速度,为提高机器整体性能,在硬件上引入硬件高速缓存Cache,加速对内存的访问。另外在现代CPU中指令的执行并不一定严格按照顺序执行,没有相关性的指令可以乱序执行,以充分利用CPU的指令流水线,提高执行速度(2)软件上:①程序员优化②编译器自身的优化:编译器优化常用的方法有:将内存变量缓存到寄存器;调整指...转载 2019-08-01 15:55:39 · 83 阅读 · 0 评论 -
C++ 智能指针详解
转自:C++ 智能指针详解一、简介由于 C++ 语言没有自动内存回收机制,程序员每次 new 出来的内存都要手动 delete。程序员忘记 delete,流程太复杂,最终导致没有 delete,异常导致程序过早退出,没有执行 delete 的情况并不罕见。用智能指针便可以有效缓解这类问题,本文主要讲解参见的智能指针的用法。包括:std::auto_ptr、boost::scoped_ptr、...转载 2019-05-14 14:30:53 · 138 阅读 · 0 评论 -
整数转字符串(itoa)
系统的itoa()函数char *itoa( int value, char *string,int radix)参数:value 欲转换的数据。string 目标字符串的地址。radix 转换后的进制数,可以是10进制、16进制等,范围必须在 2-36。功能: 将整数value 转换成字符串存入string 指向的内存空间 , radix为转换时所用基数(保存到字符串中的数...原创 2019-04-29 16:55:34 · 2161 阅读 · 0 评论 -
深拷贝拯救指针重复释放(浅拷贝)造成的内存泄漏
浅拷贝以及内存泄漏的背景先考虑一种情况,对一个已知对象进行拷贝,编译系统会自动调用一种构造函数——拷贝构造函数,如果用户未定义拷贝构造函数,则会调用默认拷贝构造函数#include <iostream>#include "student.h"int main(){ Student s1; Student s2(s1);//Student...转载 2019-04-28 23:35:02 · 681 阅读 · 0 评论 -
C++类大小详解
类的大小与什么有关系?有关因素:普通成员变量,虚函数,继承(单一继承,多重继承,重复继承,虚拟继承)无关因素:静态成员变量,静态成员函数及普通成员函数空类空类即什么都没有的类,按上面的说法,照理说大小应该是0,但是,空类的大小为1,因为空类可以实例化,实例化必然在内存中占有一个位置,因此,编译器为其优化为一个字节大小。某类继承自空类:class base{};clas...转载 2019-04-23 19:38:52 · 559 阅读 · 0 评论 -
GetMemory()问题
考点:指针题目1void GetMemeory(char *p){ p=(char*)malloc(100*sizeof(char)); } int main(){ char *str=NULL; GetMemeory(str); strcpy(str,"hello world"); cout<<str<<'\n';}(1)程序直接崩...原创 2019-04-27 20:49:19 · 735 阅读 · 0 评论 -
数的机器码表示:原码,反码,补码
本篇文章讲解了计算机的原码, 反码和补码. 并且进行了深入探求了为何要使用反码和补码, 以及更进一步的论证了为何可以用反码, 补码的加法计算原码的减法. 论证部分如有不对的地方请各位牛人帮忙指正! 希望本文对大家学习计算机基础有所帮助!一. 机器数和真值在学习原码, 反码和补码之前, 需要先了解机器数和真值的概念.1、机器数一个数在计算机中的二进制表示形式, 叫做这个数的机器数。机器数是...转载 2019-05-01 20:09:27 · 3100 阅读 · 1 评论 -
C语言中的逻辑运算符、位运算符及其应用技巧
是时候总结一波逻辑运算符和位运算符了。。。。。。其实是更想总结一下位运算符的使用小技巧来体现其实用之处逻辑运算符&& 与:A && B,只要有一个条件为false,则结果为false|| 或:A || B,只要有一个条件为true,则结果为true! 非:!A,若A为false,则结果为true。若A为true ,则结果为false位运算符&...原创 2019-03-15 17:20:58 · 5908 阅读 · 2 评论