![](https://img-blog.csdnimg.cn/20201014180756926.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
【c/c++】
文章平均质量分 80
circujoker_06
hello world
展开
-
【c/c++】银行家算法
1 需求分析 1.1 银行家算法的实现思想 允许进程动态地申请资源,系统在每次实施资源分配之前,先计算资源分配的安全性,若此次资源分配安全(即资源分配后,系统能按某种顺序来为每个进程分配其所需的资源,直至最大需求,使每个进程都可以顺利地完成),便将资源分配给进程,否则不分配资源,让进程等待。1.2 死锁的概念 死锁是指两个或两个以上的进程在执行转载 2017-03-28 18:15:26 · 8640 阅读 · 1 评论 -
【c/c++】C语言main()函数详解
为什么程序一定要从main函数开始执行?大多数脚本语言不需要标明程序开始执行的位置,例如Python、Lua。只需把程序语句直接写在源文件中,然后执行该文件。然而,C与许多编译式语言分开了3个阶段:编译、链接、运行。每个编辑单元(例如多个.c源文件)是各自独立编译成目标文件(例如.o),最后由链接器把这些目标文件链接成可执行程序。如果C容许在文件的全局域里写语句,若只有一个编译单元时问转载 2016-04-01 21:28:56 · 1236 阅读 · 0 评论 -
【c/c++】单链表、头指针、头结点、首元节点
链表中第一个结点的存储位置叫做头指针,那么整个链表的存取就必须是从头指针开始进行了。之后的每一个结点,其实就是上一个的后继指针指向的位置。这里有个地方要注意,就是对头指针概念的理解,这个很重要。“链表中第一个结点的存储位置叫做头指针”,如果链表有头结点,那么头指针就是指向头结点数据域的指针。画一个图吧。 头指针就是链表的名字。头指针仅仅是个指针而已。头结点是转载 2016-03-07 15:17:20 · 18779 阅读 · 1 评论 -
【c/c++】map
#include #include #include using namespace std;//http://www.cplusplus.com/reference/map/map///This class couples together a pair of values, which may be of different types (T1 and T2). //The i转载 2016-01-22 20:55:52 · 322 阅读 · 0 评论 -
【windows多线程】原子操作 Interlocked系列函数
上一篇《多线程第一次亲密接触 CreateThread与_beginthreadex本质区别》中讲到一个多线程报数功能。为了描述方便和代码简洁起见,我们可以只输出最后的报数结果来观察程序是否运行出错。这也非常类似于统计一个网站每天有多少用户登录,每个用户登录用一个线程模拟,线程运行时会将一个表示计数的变量递增。程序在最后输出计数的值表示有今天多少个用户登录,如果这个值不等于我们启动的线程个数,那显转载 2016-03-17 10:27:14 · 720 阅读 · 0 评论 -
【windows多线程】多线程笔试面试题汇总
系列前言 本系列是本人参加微软亚洲研究院,腾讯研究院,迅雷面试时整理的,另外也加入一些其它IT公司如百度,阿里巴巴的笔试面试题目,因此具有很强的针对性。系列中不但会详细讲解多线程同步互斥的各种“招式”,而且会进一步的讲解多线程同步互斥的“内功心法”。有了“招式”和“内功心法”,相信你也能对多线程挥洒自如,在笔试面试中顺利的秒杀多线程试题。 -----转载 2016-03-17 10:12:43 · 536 阅读 · 0 评论 -
【windows多线程】CreateThread与_beginthreadex本质区别
原文地址:http://blog.csdn.net/morewindows/article/details/7421759 本文将带领你与多线程作第一次亲密接触,并深入分析CreateThread与_beginthreadex的本质区别,相信阅读本文后你能轻松的使用多线程并能流畅准确的回答CreateThread与_beginthreadex到底有什么区别,在实际的编程中到底转载 2016-03-17 10:07:45 · 606 阅读 · 0 评论 -
【c/c++】#pragma once 与 #ifndef 的区别解析
原文地址:http://blog.csdn.net/hkx1n/article/details/4313303作用:为了避免同一个文件被include多次,C/C++中有两种方式,一种是#ifndef方式,一种是#pragma once方式。在能够支持这两种方式的编译器上,二者并没有太大的区别,但是两者仍然还是有一些细微的区别。 方式一: #ifndef转载 2016-03-03 10:03:04 · 6657 阅读 · 1 评论 -
【c/c++】auto_ptr作用和用法
标准auto_ptr智能指针机制很多人都知道,但很少使用它。这真是个遗憾,因为auto_ptr优雅地解决了C++设计和编码中常见的问题,正确地使用它可以生成健壮的代码。本文阐述了如何正确运用auto_ptr来让你的代码更加安全——以及如何避免对auto_ptr危险但常见的误用,这些误用会引发间断性发作、难以诊断的bug。1.为什么称它为“自动”指针? auto_ptr只是众多可能的智能指针转载 2016-01-12 16:11:42 · 392 阅读 · 1 评论 -
【c/c++】Vector入门
一、概述vector是C++标准模板库中的部分内容,它是一个多功能的,能够操作多种数据结构和算法的模板类和函数库。vector是一个容器,它能够存放各种类型的对象,简单地说,vector是一个能够存放任意类型的动态数组,可以动态改变大小。 例如: // c语言风格 int myHouse[100] ; // 采用vector vectorvecMyHou转载 2016-01-07 14:44:02 · 498 阅读 · 1 评论 -
【c/c++】C++代码一次读取文本文件全部内容到string对象
http://blog.sina.com.cn/s/blog_6c099f3d0100sqcj.html C++代码一次读取文本文件全部内容到string对象 目前所知最简单代码: ifstream in("readme.txt", ios::in); istreambuf_iterator beg(in), end; string s转载 2016-02-29 10:25:02 · 2800 阅读 · 0 评论 -
【c/c++】算法的时间复杂度和空间复杂度
原文地址:http://blog.csdn.net/zolalad/article/details/11848739算法的时间复杂度和空间复杂度-总结 通常,对于一个给定的算法,我们要做 两项分析。第一是从数学上证明算法的正确性,这一步主要用到形式化证明的方法及相关推理模式,如循环不变式、数学归纳法等。而在证明算法是正确的基础上,第二部就是分析算法的时间复杂度转载 2016-02-29 19:57:50 · 8896 阅读 · 0 评论 -
【c/c++】Lambda表达式
https://msdn.microsoft.com/zh-cn/library/dd293608.aspx函数对象与Lambdas你编写代码时,尤其是使用 STL 算法时,可能会使用函数指针和函数对象来解决问题和执行计算。函数指针和函数对象各有利弊。例如,函数指针具有最低的语法开销,但不保持范围内的状态,函数对象可保持状态,但需要类定义的语法开销。lambda 结合了函数指针和函数对原创 2016-04-07 20:48:43 · 2374 阅读 · 0 评论 -
【c/c++】值传递、指针传递、引用传递
C++中值传递、指针传递、引用传递的总结 收藏 1. 值传递:形参是实参的拷贝,改变形参的值并不会影响外部实参的值。从被调用函数的角度来说,值传递是单向的(实参->形参),参数的值只能传入,不能传出。当函数内部需要修改参数,并且不希望这个改变影响调用者时,采用值传递。void swap(int a,int b){ int temp; temp=a;原创 2015-10-07 19:53:51 · 335 阅读 · 0 评论 -
【c/c++】bitset
// bitset::set Sets (to one) all bits in the bitset.//默认将所有bit设置成1,单个参数也可以设置成0#include // std::cout#include // std::bitsetint main(){ std::bitset foo; std::cout << foo.set()原创 2016-04-24 16:00:59 · 388 阅读 · 0 评论 -
C语言 素数三种思路求解
#include#includevoid main(){ //最常规的思路/*int i,n;for(n=3;n{for(i=2;iif(n%i==0)break;if(i>=n)printf("%d\t",n);}*///开根号/*int i,j,n;printf("enter the n:\n");scan原创 2015-05-17 21:37:50 · 20679 阅读 · 0 评论 -
【c/c++】typedef和define
C++编程语言中,有一种专门应对类型定义的用法,叫做C++ typedef。 C++ typedef,顾名思义,为“类型定义”,可以解释为:将一种数据类型定义为某一个标识符,在程序中使用该标识符来实现相应数据类型变量的定义。例如: typedef unsigned int UINT; int main (int argc, char *argv[]) { unsigne转载 2016-04-22 11:08:22 · 578 阅读 · 0 评论 -
【c/c++】break和continue
#include #include //getch()/*break已经在switch-case中发挥很大的作用,还可以用于for、while、do while中,用于跳出循环,执行循环后面的语句*/int main(void){ int i = 0; char c; while (1){ /*设置循环*/ c = '\0'; /*变量赋初值*/ while (c !原创 2016-04-21 10:12:39 · 443 阅读 · 0 评论 -
【c/c++】list
//list构造函数示例://#include //#include ////int main()//{// // constructors used in the same order as described above:// std::list first; // empty list of ints// std:原创 2016-04-18 16:17:48 · 326 阅读 · 0 评论 -
【c/c++】指针函数和函数指针
#include#includeusing namespace std;//函数指针与指针函数,其实质和指针数组以及数组指针是同一个概念。//指针函数,就是其返回值是指针的。函数指针,就是指针中存储的地址是某一个函数的入口地址。调用这个指针以后,将在内存中的代码存储区取出相应的//代码指令,这样就好比函数功能的调用。int main(){ int arr_add(int arr[],原创 2015-12-22 21:39:09 · 427 阅读 · 0 评论 -
【c/c++】指针数组和数组指针
1、指针数组和数组指针的内存布局指针数组:首先它是一个数组,数组的元素都是指针,数组占多少个字节由数组本身决定。它是“储存指针的数组”的简称。数组指针:首先它是一个指针,它指向一个数组。在32 位系统下永远是占4 个字节,至于它指向的数组占多少字节,不知道。它是“指向数组的指针”的简称。下面到底哪个是数组指针,哪个是指针数组呢:A)int *p1[10];B)int原创 2015-12-22 20:28:11 · 606 阅读 · 0 评论 -
找含单链表的环入口点
问题1:如何判断单链表中是否存在环(即下图中从结点E到结点R组成的环)? 设一快一慢两个指针(Node *fast, *low)同时从链表起点开始遍历,其中快指针每次移动长度为2,慢指针则为1。则若无环,开始遍历之后fast不可能与low重合,且fast或fast->next最终必然到达NULL;若有环,则fast必然不迟于low先进入环,且由于fast移动步长为2,转载 2016-05-10 11:42:28 · 410 阅读 · 0 评论 -
【c/c++】size_t和size_type的差别
size_type由string类类型和vector类类型定义的类型,用以保存任意string对象或vector对象的长度,标准库类型将size_type定义为unsigned类型string抽象意义是字符串, size()的抽象意义是字符串的尺寸, string::size_type抽象意义是尺寸单位类型string::size_type它在不同的机器上,长度是可以不同的,并非固定的转载 2016-01-12 15:05:29 · 1037 阅读 · 0 评论 -
【c/c++】输入函数详解
1、cin 用法1:最基本,也是最常用的用法,输入一个数字:#include using namespace std; main () { int a,b; cin>>a>>b; cout}输入:2[回车]3[回车] 输出:5注意:>> 是会过滤掉不可见字符(如 空格、回车、TAB 等) 。如果不想过滤那就使转载 2015-12-22 16:23:26 · 522 阅读 · 0 评论 -
【c/c++】构造函数的默认参数以及缺省参数值
和普通函数一样,构造函数中参数的值既可以通过实参传递,也可以指定为某些默认值,即如果用户不指定实参值,编译系统就使形参取默认值。#include using namespace std;class Box{ public : Box(int h=10,int w=10,int len=10); //在声明构造函数时指定默认参数 int volume( ); pri转载 2016-01-06 15:55:13 · 5422 阅读 · 1 评论 -
【c/c++】内存地址
从计算机内存的角度思考C语言中的一切东东,是挺有帮助的。我们可以把计算机内存想象成一个字节数组,内存中每一个地址表示 1 字节。比方说我们的电脑有 4K 内存,那这个内存数组将会有 4096 个元素。当我们谈论一个存储地址的指针时,就当相于我们在谈论一个存储着该内存数组某个元素索引的指针。逆向引用某个指针,将会得到数组中该索引所指向的值。这一切当然都是谎言。操作系统对内存的管理要远比这复杂。内存不转载 2015-12-22 10:54:45 · 2369 阅读 · 0 评论 -
【c/c++】void指针
这一段话有助于下面文章的理解,因此耐心看完void指针是什么? void指针一般被称为通用指针或泛指针,它是C关于“纯粹地址(raw address)”的一种约定。void指针指向某个对象,但该对象不属于任何类型。请看下例: int *ip; void *p; 在上例中,ip指向一个整型值,而p指向的对象不属于任何类型。 在C中,任何时候转载 2015-12-22 10:49:09 · 470 阅读 · 1 评论 -
【c/c++】printf函数
printf()函数是格式化输出函数,一般用于向标准输出设备按规定格式输出信息,调用格式为:printf("", );其中格式化字符串包括两部分内容:1.正常字符。这些字符将按原样输出;2.格式化规定字符。以"%"开始,后跟一个或几个规定字符,用来确定输出内容格式。参量表是需要输出的一系列参数,其个数必须与格式化字符串所说明的输出参数个数一样多,各参数之间用","隔开,且顺序一一对应,转载 2015-12-22 09:49:41 · 1060 阅读 · 0 评论 -
【c/c++】流插入运算符和流提取运算符重载
C++的流插入运算符“>”是C++在类库中提供的,所有C++编译系统都在类库中提供输入流类istream和输出流类ostream。cin和cout分别是istream类和ostream类的对象。在类库提供的头文件中已经对“>”进行了重载,使之作为流插入运算符和流提取运算符,能用来输出和输入C++标准类型的数据。因此,凡是用“cout>”对标准类型数据进行输入输出的,都要用#include 把头文件转载 2016-01-04 20:26:40 · 2699 阅读 · 0 评论 -
【c/c++】类型转换函数(类型转换运算符重载函数)
用转换构造函数可以将一个指定类型的数据转换为类的对象。但是不能反过来将一个类的对象转换为一个其他类型的数据(例如将一个Complex类对象转换成double类型数据)。C++提供类型转换函数(type conversion function)来解决这个问题。类型转换函数的作用是将一个类的对象转换成另一类型的数据。如果已声明了一个Complex类,可以在Complex类中这样定义类型转换函数转载 2016-01-04 18:09:10 · 12087 阅读 · 6 评论 -
【c/c++】继承的访问控制
派生类继承了基类中除了构造函数和析构函数之外的所有成员,派生类不能选择继承一部分而舍弃另外一部分成员。对于从基类继承而来的在派生类中没有用的成员,可以通过指定继承方式,使这些成员在派生类中成为不可访问的,从而减少数据冗余和增加数据的安全性。不同的继承方式决定的不同访问控制权限体现在:(1)派生类的成员函数对所继承的基类成员的访问控制(2)类外面通过派生类对象对其所继承基类成转载 2015-12-24 18:37:55 · 663 阅读 · 0 评论 -
【c/c++】复数类
#includeusing namespace std;class complex{public: complex(){ real = 0; imag = 0; } complex(double r, double i){ real = r; imag = i; } complex operator+(complex &c2); complex operator-(complex转载 2016-01-04 15:23:52 · 3696 阅读 · 0 评论 -
【c/c++】转换构造函数
参考地址:http://c.biancheng.net/cpp/biancheng/view/221.htmlhttp://c.biancheng.net/cpp/biancheng/view/222.html标准数据类型之间的转换隐式类型转换在C++中,某些不同类型数据之间可以自动转换,例如 int i = 6; i = 7.5 + i转载 2016-01-04 16:56:21 · 578 阅读 · 0 评论 -
【c/c++】指针运算
指针变量可以进行某些运算,但运算的种类是有限的,它只能进行赋值运算、部分算术运算和关系运算。指针运算符指针运算符有两种:取地址运算符&:& 是单目运算符,其结合性为自右至左,功能是取变量的地址。取内容运算符*:* 是单目运算符,其结合性为自右至左,用来表示指针变量所指的变量。在 * 运算符之后跟的变量必须是指针变量。需要注意的是指针运算符(*)和指针变量说明中的指针说明转载 2015-12-22 11:07:03 · 643 阅读 · 0 评论 -
【c/c++】运算符优先级
C语言运算符优先级优先级运算符名称或含义使用形式结合方向说明1[]数组下标数组名[常量表达式]左到右--()圆括号(表达式)/函转载 2015-12-22 11:56:35 · 473 阅读 · 0 评论 -
【c/c++】函数模板和模板函数
1.函数模板的声明和模板函数的生成1.1函数模板的声明函数模板可以用来创建一个通用的函数,以支持多种不同的形参,避免重载函数的函数体重复设计。它的最大特点是把函数使用的数据类型作为参数。函数模板的声明形式为:template(参数表){ 函数体}其中,template是定义模板函数的关键字;template后面的尖括号不能省略;typename(或clas转载 2016-01-07 10:50:34 · 350 阅读 · 0 评论 -
【c/c++】memset()函数
/* memset example */#include #include int main(){ /* 函数原型: void * memset ( void * ptr, int value, size_t num ); 作用: Fill block of memory Sets the first num bytes of the block of memor转载 2016-01-12 12:41:27 · 274 阅读 · 0 评论 -
【c/c++】sprintf()函数
原文地址:http://www.cplusplus.com/reference/cstdio/sprintf//* sprintf example */#include int main(){ char buffer[50]; int n, a = 5, b = 4; //buffer要存储后面format的字符串,返回的结果是字符串的长度 n = sprintf(bu转载 2016-01-12 11:23:35 · 319 阅读 · 0 评论 -
【c/c++】assert()函数
assert宏的原型定义在中,其作用是如果它的条件返回错误,则终止程序执行,原型定义:#include assert.h>void assert( int expression ); assert的作用是现计算表达式 expression ,如果其值为假(即为0),那么它先向stderr打印一条出错信息,然后通过调用 abort 来终止程序运行。请看下面的程序清单badpt转载 2016-01-12 10:24:48 · 326 阅读 · 0 评论 -
【c/c++】memcpy()函数
/* memcpy example */#include #include struct { char name[16]; int age;} person, person_copy;int main(){ char myname[] = "Pierre de Fermat"; /* using memcpy to copy string: 第一个参数:待传入数据的转载 2016-01-12 10:12:02 · 497 阅读 · 0 评论