![](https://img-blog.csdnimg.cn/20201014180756919.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C++
文章平均质量分 82
ranjiewen
坚持阅读,坚持练习,日积月累! 金风玉露一相逢,便胜却人间无数!
展开
-
二分查找法的实现和应用汇总
二分查找法的实现和应用汇总 在学习算法的过程中,我们除了要了解某个算法的基本原理、实现方式,更重要的一个环节是利用big-O理论来分析算法的复杂度。在时间复杂度和空间复杂度之间,我们又会更注重时间复杂度。时间复杂度按优劣排差不多集中在:O(1), O(log n), O(n), O(n log n), O(n2), O(nk), O(2n)到目前位置,似乎我学到的算原创 2016-09-20 14:02:27 · 511 阅读 · 0 评论 -
C字符串和C++中string的区别 &&&&C++中int型与string型互相转换
在C++中则把字符串封装成了一种数据类型string,可以直接声明变量并进行赋值等字符串操作。以下是C字符串和C++中string的区别: C字符串string对象(C++)所需的头文件名称 或或需要头文件 原因为了使用字符串函数为了使用string类声明原创 2016-09-20 14:04:18 · 602 阅读 · 0 评论 -
图像旋转
这个图像的旋转,即矩阵的操作,和左神讲的旋转打印矩阵及其改编题型很相似,异曲同工!//题目描述////有一副由NxN矩阵表示的图像,这里每个像素用一个int表示,请编写一个算法,在不占用额外内存空间的情况下(即不使用缓存矩阵),//将图像顺时针旋转90度。//给定一个NxN的矩阵,和矩阵的阶数N, 请返回旋转后的NxN矩阵, 保证N小于等于500,图像元素小于等于256。原创 2016-09-20 14:04:30 · 272 阅读 · 0 评论 -
智能指针之第二印象
一、简介由于 C++ 语言没有自动内存回收机制,程序员每次 new 出来的内存都要手动 delete。程序员忘记 delete,流程太复杂,最终导致没有 delete,异常导致程序过早退出,没有执行 delete 的情况并不罕见。用智能指针便可以有效缓解这类问题,本文主要讲解参见的智能指针的用法。包括:std::auto_ptr、boost::scoped_ptr、boost::share原创 2016-09-20 14:04:42 · 230 阅读 · 0 评论 -
C++标准转换运算符 --四种
具体归纳如下:reinterpret_cast函数将一个类型的指针转换为另一个类型的指针.这种转换不用修改指针变量值存放格式(不改变指针变量值),只需在编译时重新解释指针的类型就可做到.reinterpret_cast 可以将指针值转换为一个整型数,但不能用于非指针类型的转换.例://基本类型指针的类型转换 double d=9.2; double* pd原创 2016-09-20 14:04:45 · 535 阅读 · 0 评论 -
atoi()函数的实现
atoi()函数的功能:将字符串转换成整型数;atoi()会扫描参数nptr字符串,跳过前面的空格字符,直到遇上数字或正负号才开始做转换,而再遇到非数字或字符串时('\0')才结束转化,并将结果返回(返回转换后的整型数)。 atoi()函数实现的代码: [cpp] view plain copy print?/* * name:xif * c原创 2016-09-20 14:04:50 · 187 阅读 · 0 评论 -
strcpy基本用法
C语言标准库函数strcpy,把从src地址开始且含有NULL结束符的字符串复制到以dest开始的地址空间。C语言函数原型声明:extern char *strcpy(char* dest, const char *src);头文件:#include string.h> 和 #include 功能:把从src地址开始且含有\0结束符的字符串复制到以dest开始的地址空间原创 2016-09-20 14:04:55 · 3255 阅读 · 0 评论 -
C++中的基类与派生类
派生类的继承方式总结: 继承方式 说明public 基类的public和protected的成员被派生类继承后,保持原来的状态private 基类的public和protected的成员被派生类继承后,变成派生类的private成员protected 基类的public和protected的成员被派生类继承后,变成派生类的protected成员 注:无论何种继原创 2016-09-20 14:05:36 · 430 阅读 · 0 评论 -
大端和小端--内存对齐问题
什么是大端和小端 Big-Endian和Little-Endian的定义如下:1) Little-Endian就是低位字节排放在内存的低地址端,高位字节排放在内存的高地址端。2) Big-Endian就是高位字节排放在内存的低地址端,低位字节排放在内存的高地址端。举一个例子,比如数字0x12 34 56 78在内存中的表示形式为:1)大端模式:低地址 --------原创 2016-09-20 14:05:48 · 381 阅读 · 0 评论 -
C++中string 的使用
string类的构造函数:string(const char *s); //用c字符串s初始化string(int n,char c); //用n个字符c初始化此外,string类还支持默认构造函数和复制构造函数,如string s1;string s2="hello";都是正确的写法。当构造的string太长而无法表达时会抛出length_error异常string类的字符操作原创 2016-09-20 14:04:11 · 249 阅读 · 0 评论 -
初识 istringstream、ostringstream、stringstream 运用
今天编程练习时遇到了istringstream的用法,感觉很实用。后面附题目!C++的输入输出分为三种:(1)基于控制台的I/O (2)基于文件的I/O (3)基于字符串的I/O 1、头文件 #include 2、作用istringstream类用于执行C++风格的字符串流的输入操作。 ostrings原创 2016-09-20 14:04:09 · 309 阅读 · 0 评论 -
string subscript out of range
刚刚练习华为机试上的题目遇到了这个问题,奉上两个小题://题目描述////描述://输入一个整数,将这个整数以字符串的形式逆序输出//程序不考虑负数的情况,若数字含有0,则逆序形式也含有0,如输入为100,则输出为001//////输入描述 ://输入一个int整数//////输出描述 ://将这个整数以字符串的形式逆序输出///原创 2016-09-20 14:03:57 · 4647 阅读 · 0 评论 -
牛课--C/C++
引用是除指针外另一个可以产生多态效果的手段。 1 //引用是除指针外另一个可以产生多态效果的手段。 2 #include 3 using namespace std; 4 class A 5 { 6 public: 7 virtual void print() 8 { 9 cout"A"endl;10 }11 };12 class B:原创 2016-09-20 14:02:41 · 261 阅读 · 0 评论 -
内存溢出(heap corruption detected:)
今天又遇到了上次出现的bug,然后百度了一下,想起来这是内存溢出的毛病,故记录下来! 出现的问题就是这样:heap corruption detected:after normal block(#xxx) at 0x xxxxxxxxcrt detected that the application wrote to menory after end of heap buffe原创 2016-09-20 14:02:51 · 285 阅读 · 0 评论 -
while (cin>>str)退出死循环
今天在练习的时候突然发现了这个问题,百度之感觉还挺常见的,故记之! //题目描述////写出一个程序,接受一个十六进制的数值字符串,输出该数值的十进制字符串。////输入描述 ://输入一个十六进制的数值字符串。//////输出描述 ://输出该数值的十进制字符串。#include #includestring>using na原创 2016-09-20 14:02:55 · 571 阅读 · 0 评论 -
指针函数/函数指针/指针数组/数组指针 区别
指针数组:array of pointers,即用于存储指针的数组,也就是数组元素都是指针数组指针:a pointer to an array,即指向数组的指针int* a[4] 指针数组 表示:数组a中的元素都为int型指针 元素表示:*a[i] *(a[i])是一样的,因为原创 2016-09-20 14:03:19 · 234 阅读 · 0 评论 -
C++11 现代C++风格的新元素--简介
C++11标准推出了很多有用的新特性,本文特别关注那些相比C++98更像是一门新语言的特性,理由是:这些特性改变了编写C++程序使用的代码风格和习语【译注 1】,通常也包括你设计C++函数库的方式。例如,你会看到更多参数和返回值类型为智能指针(smart pointer),同时也会看到函数通过值传递返回大型对象。你将会发现在大多数的代码示例中充斥着新特性的身影。例如,几乎每5行现代C++代原创 2016-09-20 14:03:24 · 440 阅读 · 0 评论 -
关于Windows API、CRT和STL二三事
1.本文编写目的 本文是为了帮助一些人弄清一些关于Windows API, C运行时程序库(CRT), 和标准C++库(STL)的基本概念。有很多人甚至是有经验的程序员在这些概念上是含糊不清的甚至是有错误观点。如果你想知道他们是在什么基础上实现的并且一直没时间弄清楚这些概念,请花费点时间阅读下本文。2. 基本概念 下面这幅图代表了WinAPI、CRT和STL三者之间的关系。 表 1原创 2016-09-20 14:03:26 · 386 阅读 · 0 评论 -
UML的类图关系分为: 关联、聚合/组合、依赖、泛化(继承)
UML的类图关系分为: 关联、聚合/组合、依赖、泛化(继承)。而其中关联又分为双向关联、单向关联、自身关联;下面就让我们一起来看看这些关系究竟是什么,以及它们的区别在哪里。1、关联双向关联:C1-C2:指双方都知道对方的存在,都可以调用对方的公共属性和方法。在GOF的设计模式书上是这样描述的:虽然在分析阶段这种关系是适用的,但我们觉得它对于描述设计模式内的类关系来说显得太抽象了,因为在设计阶段关联原创 2016-09-20 14:03:35 · 1328 阅读 · 0 评论 -
动态创建二维vector数组 C和C++ 及指针与引用的区别
二维vectorvector > ivec(m ,vector(n)); //m*n的二维vector动态创建m*n的二维vector方法一:vector > ivec;ivec.resize(m);for(int i=0;i方法二:vector > ivec;ivec.resize(m,vector(n));动态创建二维数组a[m][n]C语言版:#includeint **a=(int原创 2016-09-20 14:03:53 · 3248 阅读 · 0 评论 -
c/c++工程中外部头文件及库添加方法
在VS工程中,添加c/c++工程中外部头文件及库的基本步骤: 1、添加工程的头文件目录:工程---属性---配置属性---c/c++---常规---附加包含目录:加上头文件存放目录。 2、添加文件引用的lib静态库路径:工程---属性---配置属性---链接器---常规---附加库目录:加上lib文件存放目录。 然后添加工程引用的lib文件名:工程---属性--原创 2016-09-20 14:05:57 · 794 阅读 · 0 评论 -
C使用FILE指针文件操作
文件的基本概念 所谓“文件”是指一组相关数据的有序集合。 这个数据集有一个名称,叫做文件名。实际上在前面的各章中我们已经多次使用了文件,例如源程序文件、目标文件、可执行文件、库文件 (头文件)等。文件通常是驻留在外部介质(如磁盘等)上的,在使用时才调入内存中来。从不同的角度可对文件作不同的分类。从用户的角度看,文件可分为普通文件和设备文件两种。 普通文件是指驻留在磁盘或其它外部介质上的一个原创 2016-09-20 14:06:17 · 514 阅读 · 0 评论 -
GC算法 垃圾收集器
GC算法 垃圾收集器参考:http://www.cnblogs.com/ityouknow/p/5614961.html概述垃圾收集 Garbage Collection 通常被称为“GC”,它诞生于1960年 MIT 的 Lisp 语言,经过半个多世纪,目前已经十分成熟了。jvm 中,程序计数器、虚拟机栈、本地方法栈都是随线程而生随线程而灭,栈帧随着方法的进入和退出做入栈和出栈操原创 2016-09-20 14:09:09 · 294 阅读 · 0 评论 -
udp通信C++实现的细节
在windows/linux下有下面结构:sockaddr结构struct sockaddr{unsigned short sa_family;/*addressfamily,AF_xxx*/char sa_data[14];/*14bytesofprotocoladdress*/};sa_family是地址家族,一般都是“AF_xxx”的形式。通常大多用的是都是AF_原创 2016-09-20 14:09:16 · 1309 阅读 · 0 评论 -
C++11 之 " = delete "
1 缺省函数 设计一个类,没有成员函数 (member function),只有成员数据 (member data)class DataOnly {private: std::string strName; // member data int iData;};1.1 特殊成员函数 C++98 编译器会为其隐式的产生四原创 2016-09-20 14:11:14 · 612 阅读 · 1 评论 -
Windows字符集的统一与转换
以前也零零散散看过一些字符编码的问题,今天看来这边博客,感觉很多东西都总结在里面,非常值得学习!一、字符集的历史渊源在Windows编程时经常会遇到编码转换的问题,一直以来让刚接触的人摸不着头脑。其实只要弄清Win32程序使用的字符编码方式就清楚了,图1展示了一个Win32控制台项目的属性中的字符集选项。这里有两个不同的字符集:一个是Unicode字符集,另一个就是多字节字符集MBCS(M原创 2016-09-20 14:12:15 · 557 阅读 · 0 评论 -
C++读取、旋转和保存bmp图像文件编程实现
以前也遇到过bmp文件的读写。这篇博客很好,写的其他内容也值得学习。参考:http://blog.csdn.net/xiajun07061225/article/details/6633938 学习原创 2016-09-20 14:13:09 · 3034 阅读 · 0 评论 -
C/C++动态分配与释放内存的区别详细解析
以下是对C与C++中动态分配与释放内存的区别进行了详细的分析介绍,需要的朋友可以过来参考下1. malloc()函数1.1 malloc的全称是memory allocation,中文叫动态内存分配。原型:extern void *malloc(unsigned int num_bytes); 说明:分配长度为num_bytes字节的内存块。如果分配成功则返回指向被分配内存的指原创 2016-09-20 14:14:03 · 383 阅读 · 0 评论 -
C++多线程框架-----Mutex互斥和Sem信号量
互斥和信号量是多线程编程的两个基础,其原理就不详细说了,大家去看看操作系统的书或者网上查查吧。对于互斥的实现,无论什么操作系统都离不开三个步骤1.初始化互斥锁2.锁操作3.解锁操作 对于不同的系统只是实现的函数有一些不同而已,但是功能其实都大同小异,在锁操作和解锁操作的时候大部分系统都有超时机制在里面,来保证不会一直锁在某个地方,我们为了框架简单,没有设置超时,进原创 2016-09-20 14:14:52 · 1253 阅读 · 1 评论 -
c++11信号量实现
c++11中有 mutex (互斥量),有 condition_variable (条件变量),并没有 semaphore (信号量)。信号量,操作系统中一般都有提,后来 google 说可以使用 mutex+condition_variable 实现一个,后来写来写去,都死锁 (deadlock) ——,O__O"…,后来 google 了一个,整理了一下思路。信号量神马是信号量?信号量原创 2016-09-20 14:14:56 · 612 阅读 · 0 评论 -
C++11 多线程
C++11开始支持多线程编程,之前多线程编程都需要系统的支持,在不同的系统下创建线程需要不同的API如pthread_create(),Createthread(),beginthread()等,使用起来都比较复杂,C++11提供了新头文件、、、等用于支持多线程。 使用C++11开启一个线程是比较简单的,下面来看一个简单的例子:#include #include voi原创 2016-09-20 14:09:05 · 241 阅读 · 0 评论 -
cin.ignore()函数的用法
功能:函数用于输入流。它读入字符,直到已经读了num 个字符(默认为1)或是直到字符delim 被读入(默认为EOF).其调用形式为cin.ignore(n,终止字符) 原型:istream &ignore( streamsize num=1, int delim=EOF ); 函数作用是跳过输入流中n个字符,或在遇到指定的终止字符时提前结束(此时跳过包括终止字符在内的原创 2016-09-20 14:08:51 · 506 阅读 · 0 评论 -
memset()实现及细节
memset是计算机中C/C++语言函数。将s所指向的某一块内存中的前n个 字节的内容全部设置为ch指定的ASCII值, 块的大小由第三个参数指定,这个函数通常为新申请的内存做初始化工作, 其返回值为指向s的指针。 头文件:或void *memset(void *s, int ch, size_t n);函数解释:将s中前n个字节替换为ch并返回s;memset:作用是在原创 2016-09-20 14:08:24 · 2500 阅读 · 0 评论 -
CString-int-string-char-BSTR之间的转换
一.CString, int, string, char*之间的转换string 转 CStringCString.Format("%s", string.c_str());char 转 CString CString.Format("%s", char*);char 转 string string s(char *);string 转 char * char *p = string原创 2016-09-20 14:06:38 · 731 阅读 · 0 评论 -
STL map 用法
首先make_pairPairs C++标准程序库中凡是“必须返回两个值”的函数, 也都会利用pair对象 classpair可以将两个值视为一个单元。容器类别map和multimap就是使用pairs来管理其健值/实值(key/value)的成对元素。 pair被定义为struct,因此可直接存取pair中的个别值.两个转载 2016-03-13 17:04:48 · 242 阅读 · 0 评论 -
计算机程序的思维逻辑- 函数调用的基本原理
从内存的角度看栈和堆! 我们介绍了函数的基本概念,在最后我们提到了一个系统异常java.lang.StackOverflowError,栈溢出错误,要理解这个错误,我们需要理解函数调用的实现机制。本节就从概念模型的角度谈谈它的基本原理。我们之前谈过程序执行的基本原理:CPU有一个指令指示器,指向下一条要执行的指令,要么顺序执行,要么进行跳转(条件跳转或无条件跳转)。基本上,这依然原创 2016-09-20 14:07:07 · 1277 阅读 · 0 评论 -
c++ 对象内存布局详解
今天看了的,感觉需要了解对象内存的问题。参考:http://blog.jobbole.com/101583/1.何为C++对象模型?引用《深度探索C++对象模型》这本书中的话: 有两个概念可以解释C++对象模型:语言中直接支持面向对象程序设计的部分。对于各种支持的底层实现机制。直接支持面向对象程序设计,包括了构造函数、析构函数、多态、虚函数等等原创 2016-09-20 14:07:38 · 407 阅读 · 0 评论 -
.hpp文件
hpp在C++中的含义 以前在开源代码里面遇到过,今天看boost源码的时候又遇到了,故学习一下。 hPP,计算机术语,用C/C++语言编写的头文件,通常用来定义数据类型,声明变量、函数、结构和类。而实现代码将直接编译到调用者的obj文件中,不再生成单独的obj,采用hpp将大幅度减少调用 project中的cpp文件数与编译次数,也不用再发布烦人的lib与原创 2016-09-20 14:07:48 · 299 阅读 · 0 评论 -
C++异常处理assert,throw,exit用法
常见的几个小细节问题。assert应用: 在现实世界中,我们脑袋时刻都在判断对与错,对的事情我们会继续深入下去,而错的事情我们会马上停止,那么在编程开发中我们如何赋予程序这种判断事物对错的能力呢?其中一个方案就可以使用断言assert,我们最常用的地方就是在函数中检查形参的数据合法性。1、函数所属头文件: assert.h2、函数原型:原创 2016-09-20 14:08:00 · 945 阅读 · 0 评论 -
memcpy和memmove
变态的命名 我们在写程序时,一般讲究见到变量的命名,就能让别人基本知道该变量的含义。memcpy内存拷贝,没有问题;memmove,内存移动?错,如果这样理解的话,那么这篇文章你就必须要好好看看了,memmove还是内存拷贝。那么既然memcpy和memmove二者都是内存拷贝,那二者究竟有什么区别呢?先说memcpy 你有没有好好的参加过一场C++笔试。让你写出m原创 2016-09-20 14:08:02 · 335 阅读 · 0 评论