![](https://img-blog.csdnimg.cn/20201014180756738.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
c/c++
锐萌瑞
这个作者很懒,什么都没留下…
展开
-
C++ Primer 学习心得第八章
8.1 IO类8.2 文件输入输出8.3 string流•1. 输入输出机制•2. 流类库•3. 标准输入输出流•4. 文件输入输出流•5. 字符串输入输出流•C++语言的输入输出机制包含3层,前两层是从传统的C语言继承而来,分别是底层I/O和高层I/O,第3层是C++中增添的流类库。•(1)底层I/O:底层I/O依赖原创 2017-12-06 17:39:29 · 259 阅读 · 0 评论 -
C++ Primer学习心得第七章
7.1 定义抽象数据类型7.2 访问控制与封装7.3 类的其他特性7.4 类的作用域7.5 构造函数再谈7.6 类的静态成员7.1定义抽象数据类型 类的基本思想是数据抽象和封装。数据抽象是一种依赖于接口和实现分离的编程技术。类的接口包括用户所能执行的操作;类的实现则包括类的数据成员,负责接口实现的函数体以及定义类所需的各种私有函数。原创 2017-12-05 15:09:56 · 227 阅读 · 0 评论 -
C++ Primer学习心得第四章
4.1 基础4.2 算术运算符4.3 逻辑与关系运算符4.4 赋值运算符4.5 递增和递减运算符4.6 成员访问运算符4.7 条件运算符4.8 位运算符4.9 sizeof运算符4.10 逗号运算符4.11 类型转换4.12 运算符优先级表4.1基础左值和右值:书中简单做了个归纳: 当一个对象被用作为右值原创 2017-11-21 16:59:06 · 225 阅读 · 0 评论 -
C++ Primer学习心得第三章
内容:3.1 命名空间的using声明3.2 标准库类型string3.3 标准库类型vector3.4 迭代器介绍3.5 数组3.6 多维数组3.1命名空间的using声明1.可参考之前我写过的一些总结:点击打开链接2.在头文件(*.h或者*.hpp)中不要使用using语句。因为如果头文件中使用了using语句后,每个includ原创 2017-11-20 15:55:13 · 249 阅读 · 0 评论 -
容器的简单介绍
容器是STL的基础,容器分2种:序列式容器(sequential container)关联式容器(associative container)序列式容器会强调元素的次序,依次维护第一个元素、第二个元素……,直到最后一个元素,面向序列式容器的操作主要是迭代操作。本节讨论序列式容器vector、list和deque的用法,以及序列式容器的共同操作。使用序列式容器,须原创 2017-10-31 15:24:23 · 514 阅读 · 0 评论 -
STL的基本介绍
STL,即Standard Template Library,不是面向对象的编程,而是一种新的编程模式:泛型编程(Generic Programming)。STL是C++标准库的组成部分,STL是很庞大复杂的系统,单单就STL就可写出厚达千页的技术书籍,所以,本章不可能做到面面俱到,重点在于介绍泛型编程的思想和本质,介绍一些常用的方法,为初学者学习STL提供一些感性认识,起到抛砖引玉的作用。S原创 2017-10-31 15:23:22 · 369 阅读 · 0 评论 -
名称空间
1.为什么引入名称空间:大型程序往往是由团队开发的,即使是个人编写的程序,随着代码量的增多,变量、函数、类的名字冲突的现象时有发生,有的情况下,编译器会指明错误所在,但有时候会发生一些察觉不到的覆盖,让程序员对出现的错误摸不着头脑。很多厂商提供了快捷的第3方类库,用户不用关心库中的类是如何实现的,知道如何调用接口使用即可,但多个厂商定义的变量、函数和类的名字可能会发生冲突,同样是初始化操作原创 2017-06-26 01:22:43 · 379 阅读 · 0 评论 -
#ifndef #define #endif的用法
头件的中的#ifndef,这是一个很关键的东西。比如你有两个C文件,这两个C文件都include了同一个头文件。而编译时,这两个C文件要一同编译成一个可运行文件,于是问题来了,大量的声明冲突。 还是把头文件的内容都放在#ifndef和#endif中吧。不管你的头文件会不会被多个文件引用,你都要加上这个。一般格式是这样的: #ifndef #define转载 2017-05-20 00:27:55 · 298 阅读 · 0 评论 -
unordered_map
在C++11以前要使用unordered_map需要 #include//在unordered_map之前加上tr1库名, using namespace std::tr1;//与此同时需要加上命名空间[查找元素是否存在] 若有unordered_map mp;查找x是否在map中 方法1: 若存在 mp.find(x)!=mp.en转载 2017-05-19 20:33:49 · 339 阅读 · 0 评论 -
最小编辑距离算法
概念字符串的编辑距离,又称为Levenshtein距离,由俄罗斯的数学家Vladimir Levenshtein在1965年提出。是指利用字符操作,把字符串A转换成字符串B所需要的最少操作数。其中,字符操作包括:删除一个字符 a) Insert a character插入一个字符 b) Delete a character修改一个字符转载 2017-05-19 19:55:37 · 18046 阅读 · 2 评论 -
Reactor
1、概念 reactor设计模式,是一种基于事件驱动的设计模式。Reactor框架是ACE各个框架中最基础的一个框架,其他框架都或多或少地用到了Reactor框架。 在事件驱动的应用中,将一个或多个客户的服务请求分离(demultiplex)和调度(dispatch)给应用程序。在事件驱动的应用中,同步地、有序地处理同时接收的多个服务请求。原创 2017-05-18 20:31:46 · 216 阅读 · 0 评论 -
回调函数
今天讨论下C/C++中的回调函数。 在理解“回调函数”之前,首先讨论下函数指针的概念。函数指针(1)概念:指针是一个变量,是用来指向内存地址的。一个程序运行时,所有和运行相关的物件都是需要加载到内存中,这就决定了程序运行时的任何物件都可以用指针来指向它。函数是存放在内存代码区域内的,它们同样有地址,因此同样可以用指针来存取函数,把这种指向函数入口地址的指针称为函数指转载 2017-10-31 16:39:34 · 206 阅读 · 0 评论 -
c++引用
引用引入了对象的一个同义词。定义引用的表示方法与定义指针相似,只是用&代替了*。引用(reference)是c++对c语言的重要扩充。引用就是某一变量(目标)的一个别名,对引用的操作与对变量直接操作完全一样。引用的声明方法:类型标识符 &引用名=目标变量名 (1)&在此不是求地址运算,而是起标识作用。 (2)类型标识符是指目标变量的类型。 (3)声明引用时,必须同时转载 2017-04-10 16:26:50 · 285 阅读 · 0 评论 -
友元
•一般来说,类的私有成员只能在类的内部访问,类外的函数是不能访问它们的。•但是,可以将一个函数定义为类的友元函数,这时该函数就可以访问该类的私有成员了。•同时,也可以把另一个类B定义为本类A的友元类,这样B类就可以访问A类的任何成员了。•下面来具体讨论友元函数和友元类的概念>友元之非成员函数:•在类的定义中用friend声明了一个外部函数或其他类的成员函数(publ原创 2017-04-19 21:44:23 · 1287 阅读 · 0 评论 -
智能指针
智能指针-->资源管理-->RAII(Resource Acquisition Is Initializationa)RAII技术的实质: 利用栈对象管理资源特征: >当获取资源时,将其托管给一个对象 >当对象被销毁时,会自动释放该资源 >提供能够访问资源的方法 >一般情况下是不能进行复制和赋值(表达的是对象语义) RAII-->auto_ptr原创 2017-12-19 19:07:36 · 133 阅读 · 0 评论 -
const关键字
1.const定义常量(和#define)的区别:const int a=10;发生时机:编译,它就会有语法检查,如果定义常量,推荐使用#define a 10发生时机:预处理,只是一个简单的字符串替换(宏出错的话并不能意识到已经发生了错误)2.const 修饰指针的两种形式:常量指针(pionter to const):const int *pa=&b;*pa=110;//原创 2017-04-13 18:12:14 · 284 阅读 · 0 评论 -
C++中int和string的转换
一、int转string1.c++11标准增加了全局函数std::to_string:string to_string (int val);string to_string (long val);string to_string (long long val);string to_string (unsigned val);string to_string (unsigned long val);...转载 2018-04-16 13:00:07 · 217 阅读 · 1 评论 -
C++string的用法和例子
使用场合:string是C++标准库的一个重要的部分,主要用于字符串处理。可以使用输入输出流方式直接进行操作,也可以通过文件等手段进行操作。同时C++的算法库对string也有着很好的支持,而且string还和c语言的字符串之间有着良好的接口。虽然也有一些弊端,但是瑕不掩瑜。 其中使用的代码多数都是来自cpp官网,因为例子非常全。声明和初始化方法:想使用string首先要在头文件当中加入< ...转载 2018-04-16 13:45:09 · 171 阅读 · 0 评论 -
priority_queue
priority_queue调用 STL里面的 make_heap(), pop_heap(), push_heap() 算法实现,也算是堆的另外一种形式。先写一个用 STL 里面堆算法实现的与真正的STL里面的 priority_queue用法相似的priority_queue, 以加深对 priority_queue 的理解 #include <iostream> ...转载 2018-11-28 09:32:34 · 129 阅读 · 0 评论 -
关于二维数组传参做形参
关于二维数组传参做形参二维数组的存储方式是和一维数组没什么区别,但是用二维数组做参数,它的形参该怎样写?要注意的是:函数中的形参其实就相当于一个声明,并不产生内存分配,形参的目的就是要让编译器知道函数参数的数据类型。正确的是:void Func(int array[3][10]); void Func(int array[][10]);可以省略第一维的大小错误的是v转载 2017-03-20 09:44:18 · 1103 阅读 · 0 评论 -
类与类之间的关系
类与类之间的几种关系一、继承关系 继承指的是一个类(称为子类、子接口)继承另外的一个类(称为父类、父接口)的功能,并可以增加它自己的新功能的能力。在Java中继承关系通过关键字extends明确标识,在设计时一般没有争议性。在UML类图设计中,继承用一条带空心三角箭头的实线表示,从子类指向父类,或者子接口指向父接口。 二、实现关系 实现指的是转载 2017-05-08 23:58:55 · 311 阅读 · 0 评论 -
istringstream、ostringstream、stringstream 类介绍
istringstream、ostringstream、stringstream 类介绍 .0、C++的输入输出分为三种:(1)基于控制台的I/O (2)基于文件的I/O (3)基于字符串的I/O 1、头文件[cpp] view plaincopyprint?原创 2017-05-08 16:51:22 · 280 阅读 · 0 评论 -
类中的构造函数,析构函数,复制构造函数,赋值函数
构造函数、析构函数、赋值函数是每个类最基本的的函数。每个类只有一个析构函数和一个赋值函数。但是有很多构造函数(一个为复制构造函数,其他为普通构造函数。对于一个类A,如果不编写上述四个函数,c++编译器将自动为A产生四个默认的函数,即:A(void) //默认无参数构造函数A(const A &a)原创 2017-04-11 20:51:57 · 566 阅读 · 0 评论 -
static成员
下面详细说说static的功能以及它的来龙去脉:static作为编程语言里面一种重要的数据类型,它的地位在面试的过程里也是相当的高。为什么要引入static 函数内部定义的变量,在程序执行到它的定义处时,编译器为它在栈上分配空间,大家知道,函数在栈上分配的空间在此函数执行结束时会释放掉,这样就产生了一个问题: 如果想将函数中此变量的值保存至下一次调用时,如何实现?最容转载 2017-04-13 21:15:54 · 436 阅读 · 1 评论 -
new和malloc的区别
new与malloc的10点区别1. 申请的内存所在位置new操作符从自由存储区(free store)上为对象动态分配内存空间,而malloc函数从堆上动态分配内存。自由存储区是C++基于new操作符的一个抽象概念,凡是通过new操作符进行内存申请,该内存即为自由存储区。而堆是操作系统中的术语,是操作系统所维护的一块特殊内存,用于程序的内存动态分配,C语言使用malloc从堆上分转载 2017-04-11 11:07:13 · 197 阅读 · 0 评论 -
引用和指针的区别和联系
★ 相同点: 1. 都是地址的概念; 指针指向一块内存,它的内容是所指内存的地址;引用是某块内存的别名。 ★ 区别: 1. 指针是一个实体,而引用仅是个别名; 2. 引用使用时无需解引用(*),指针需要解引用; 3. 引用只能在定义时被初始化一次,之后不可变;指针可变; 引用“从一而终” ^_^ 4. 引用没有 con转载 2017-04-10 16:40:18 · 346 阅读 · 0 评论 -
gets(s)存在的溢出漏洞问题
scanf遇到输出不能有空格,所以用gets输入字符串,但是gets出现了一个潜在问题,gets将不停地往s中塞东西,不管s的可用空间是否足够,就存在溢出漏洞问题解决方案可以用fgets代替,不如说char s[100],buf[100]; fgets(buf,sizeof(s),stdin); while(fgets(buf,sizeof(buf),stdin)//循环输入原创 2017-03-02 16:44:56 · 3187 阅读 · 0 评论 -
字符数组的长度最大值和次大值
输入一个字符数组,确定其长度的最大值和次大值#include#include#include#define maxsize 100void big(char *arr[],int size,char *big1,char *big2){ int i; for(i=0;i<size;i++) { if(strlen(big1)<strlen(arr[i])) {原创 2017-03-02 16:36:51 · 1393 阅读 · 0 评论 -
最大质因数求解
//求一个元素的最大质因数#includeint main(){ int i,j,k,max; int n; while(scanf("%d",&n)!=EOF) { max=0; for(i=2;imax) max=i; } printf("%d\n",max); } return 0;}原创 2017-03-02 11:14:28 · 1759 阅读 · 0 评论 -
c++内存详解
1)栈区(stack):由编译器自动分配释放 ,存放函数的 参数值,局部变量的值等。其操作方式类似于数据结 构中的栈。 向地地址扩展,连续的内存空间.2)堆区(heap):一般由程序员分配释放,若程序员不释放,程序结束时可能由OS回收。注意它与数据结构 中的堆是两回事,分配方式倒是类似于链表。不连续的内存空间3)全局/静态区(static):全局变量和静态变量的存储是放在一块的,在程序原创 2017-03-02 10:03:49 · 265 阅读 · 0 评论 -
字典查找
读取Txt,统计某个关键字出现的次数,并将其所在的行打印出来/// /// @file TextQuery.cc /// @author miaobeihai(452686191@gmail.com) /// @date 2017-05-01 10:55:06 ///#include #include #include #include #inclu原创 2017-05-01 23:42:23 · 634 阅读 · 0 评论 -
运算符重载详情
•为了使对用户自定义数据类型的数据的操作与内置的数据类型的数据的操作形式一致,C++提供了运算符的重载,通过把C++中预定义的运算符重载为类的成员函数或者友元函数,使得对用户的自定义数据类型的数据—对象的操作形式与C++内部定义的类型的数据一致。•1.运算符重载规则: >重载运算符时,参数必须是自定义类类型或者枚举类型 >运算符的优先级和结合性保持不变 >&& ||原创 2017-04-19 20:58:50 · 559 阅读 · 0 评论 -
只能生成栈对象和只能生成堆对象
new/delete的工作机制:•使用new表达式时发生的三个步骤:1.调用名为operator new的标准库函数,分配足够大的原始的未类型化的内存,以保存指定类型的一个对象2.运行该类型的一个构造函数去初始化对象3.返回指向新分配并构造的构造函数对象的指针•使用delete表达式时,发生的步骤:1.调用对象的析构函数2.调用名为operator delete原创 2017-04-17 10:13:13 · 419 阅读 · 0 评论 -
数组概念和用法
C语言为数据,提供了一种构造数据类型:数组;所谓数组就是一组具有相同类型的数据的有序集合。int a[10];float b[4];注意:int k,int a[k]; /* 不能用变量说明数组大小*/注意:在定义数组的时候,尽量在程序开头定义长度,不然改数组大小的时候,非常麻烦!(编程规范)例:#define N 10int a[N ]每个数据元素占用原创 2017-03-02 09:47:49 · 483 阅读 · 0 评论 -
Linux下连接Mysql
本文出自 http://blog.csdn.net/shuangde800首先保证安装:1:安装MySQL:sudo apt-get install mysql-server mysql-client2:安装MySQL开发包:sudo apt-get install libmysqlclient15-dev此时需要用到的头文件会出现在/usr/i转载 2017-05-13 16:27:46 · 306 阅读 · 0 评论 -
继承
继承的定义形式一般如下:class 派生类 : 派生方式 基类 {…}; //public, protected, private派生类生成过程包含3个步骤:吸收基类的成员改造基类的成员添加自己新的成员继承与派生的概念 由point类 派生出 point3D类#include using namespace std;class point //point原创 2017-05-04 17:56:09 · 281 阅读 · 0 评论 -
atexit()函数
atexit()函数atexit 函数名: atexit 头文件:#include 功 能: 注册终止函数(即main执行结束后调用的函数) 用 法: int atexit(void (*func)(void)); 注意:按照ISO C的规定,一个进程可以登记多达32个函数,这些函数将由exit自动调用。atexit()注册的转载 2017-04-22 10:15:38 · 195 阅读 · 0 评论 -
单例模式的内存释放
单例模式前面已经说过了,下面说说单例模式的私有静态成员_singleton的释放如果在类的析构行为中有必须的操作,比如关闭文件,释放外部资源,那么上面所示的代码无法实现这个要求。我们需要一种方法,正常地删除该实例。可以在程序结束时调用GetInstance并对返回的指针调用delete操作。这样做可以实现功能,但是不仅很丑陋,而且容易出错。因为这样的附加代码很容易被忘记,而且也原创 2017-04-21 13:07:13 · 4022 阅读 · 0 评论 -
单例模式
//单例模式是一种常用的软件设计模式。在它的核心结构中只包含一个被称为单例的特殊类。通过单例模式可以保证系统中一个类只有一个实例#include #include using std::cout;using std::endl;//要求:在内存之中只能创建一个对象//1. 该对象不能是全局对象或者栈对象//2. 只能是堆对象//作用:// 在一定程序上,它是可以取代全局变量原创 2017-04-13 21:53:14 · 165 阅读 · 0 评论 -
写时复制Copy-On-Write
Copy-on-Write简称COW,不是奶牛,好处就是能保证数据的完整性,掉电的话容易恢复。•Copy-On-Write一定使用了“引用计数”,必然有一个变量类似于RefCnt•当第一个string对象str1构造时,string的构造函数会根据传入的参数从堆上分配内存•当有其它string对象复制str1时,这个RefCnt会自动加1•当有对象析构时,这个计数会减1;直到最原创 2017-04-20 23:05:16 · 495 阅读 · 1 评论