C++
文章平均质量分 81
白帽子hhh
这个作者很懒,什么都没留下…
展开
-
C++中函数重载
我们主要探讨一下两个问题:(1)什么是函数重载?(2)为什么要有函数重载?问题一回答:函数重载指的是,在同一作用域内,可以有一组具有相同的函数名,不同的参数列表(类型或者个数),返回类型任意,这组函数称为重载函数。问题二回答:当在不同的场合使用相同的功能时,使用函数重载,可以原创 2017-07-02 16:34:25 · 255 阅读 · 0 评论 -
C/C++动态内存管理
程序内存分配区域:(1)栈区:栈区主要存放执行函数而分配的局部变量、函数形参、返回数据、返回地址等。效率很高。(2)堆区。程序员申请与释放。程序结束时可能由os回收,分配方式类似链表。(3)静态区(数据段)。存放全局变量、静态数据。程序结束后由系统释放。(4)代码段(常量去)。存放函数体的二进制代码(全局函数、类成员函数)关于C中的动态内存管理:(1)void ...原创 2019-03-15 16:01:22 · 186 阅读 · 0 评论 -
设计一个类,只能在栈上创建对象
题目:设计一个类,只能在栈上创建对象分析:方法(1):将构造函数定义成私有的,并且在一个静态成员函数中,调用构造函数在栈上创建对象。但是我有个问题,静态成员函数不能调用非静态成员函数,那怎么就可以调用构造函数呢。class Test{private: //构造函数定义成私有的 Test() {} public: static Test Create() {...原创 2019-03-15 18:37:35 · 236 阅读 · 1 评论 -
设计一个类,只能在堆上创建对象
题目:设计一个类,只能在堆上创建对象分析:将构造函数定义为私有的,然后提供一个静态的成员函数,里面在堆上创建对象。这里用静态的成员函数的原因是,将来可以不用对象来访问这个函数(在堆上创建对象)并且要禁用拷贝构造函数,否则拷贝构造函数构造的对象就是在栈上创建的。禁用一个成员函数有两种方式:(1)C++98中,将一个成员函数只声明不定义,并且放成私有的,放成私有的原因是/防止有人在类外实现它...原创 2019-03-15 18:38:43 · 295 阅读 · 0 评论 -
从字符串的指定位置删除指定长度的子串
题目:从字符串的指定位置删除指定长度的子串。例如,一个字符串为"abcdefg",指定从第三个字符开始删除长度为3的子串。删除后字符串变为"abfg".分析:(1)直接略过要删除的字符,使用strcpy将后面的拷前来。(2)手动计算下标位置,一个字符一个字符拷贝//从第n个字符开始,删除连续len个字符char* remove_lenstr(char* str, int n, i...原创 2019-03-11 17:03:37 · 3761 阅读 · 0 评论 -
统计0/1字符串中0和1连续出现的额最大次数
题目:统计0/1字符串中0和1连续出现的额最大次数,如字符串“111001111110000”中,0连续出现的最大次数为4,1连续出现的最大次数为6。分析:统计连续的0、或者1的个数,每次比较对应个数,如果当前次的个数大于上一次的就更新最大次数,需要注意的是,每统计一次连续的,计数器都得从0开始,不能累加因此建议将计数器放成局部变量。void max_count(char* str...原创 2019-03-11 17:56:55 · 1082 阅读 · 0 评论 -
求两个字符串的最大公共子串.
题目:求两个字符串的最大公共子串.例如字符串A="abcdefg",字符串B="cdeab";分析:从两个字符串的那个较短的字符串出发,求其全部子串,判断每一个子串是不是那个长串的子串,求子串过程本着由长到段的原则,这样可以保证第一次匹配到的子串就是最大的公共子串。char* get_common_string(char* str1, char* str2){ assert(s...原创 2019-03-11 21:10:06 · 945 阅读 · 0 评论 -
反转字符串(C++)
题目:反转字符串。分析:首尾交换法,注意参数要传引用,否则无法反转外面传进来的字符串。string reverse_str(string& s){ if (s.empty()) return s; int begin = 0; int end = s.size() - 1; while (begin < end) { swap(s[begin],...原创 2019-03-12 19:09:37 · 523 阅读 · 0 评论 -
找一个字符串第一次只出现一次的字符,返回其下标
题目:找一个字符串第一次只出现一次的字符,返回其下标。分析:将每个字符的ASCII码值作为下标建立一个count数组,即如果这个字符出现一次,count数组以该字符的ASCII码作为下标的的元素值加1即用count数组记录每个字符出现的次数,最后从头到尾扫描字符串,只要哪一个字符,它的ASCII码作为count数组下标对于元素值为1的话,说明这个字符是第一个出现一次的字符。int ...原创 2019-03-12 19:12:07 · 1465 阅读 · 0 评论 -
验证一个字符串是否回文,只考虑字母和数字,而且忽略大小写
题目:验证一个字符串是否回文,只考虑字母和数字,而且忽略大小写。分析:方法(1):先将字符串中所有的字符转换成大写(也可以是小写),然后判断首尾字符是否相等。方法(2)也是首尾字符判断是否相等,但是在忽略大小写这块有变化,方法(1)中我们将字母都转换成大小写,由于忽略大小写的意思就是,当s[begin]是小写字母'a'时,s[end]是大写字母'A'时,我们要认为它们是相等的由于...原创 2019-03-12 19:15:06 · 2958 阅读 · 0 评论 -
两个字符串相加(非负数)
题目:两个字符串相加(非负数)。分析:从两个字符串的末尾位对应为开始相加,每次都是对应为加上上一次的进位(第一次是0,之后每满十,进位位置1)需要注意的是,当短串完了不能之间将长串直接拷下来,原因是可能有极端的情况一直需要进位(如9999+1),另外,最后还要判断是否有进位。string add_string(string num1, string num2){ int ind...原创 2019-03-12 19:16:16 · 5311 阅读 · 0 评论 -
将字符串中的单词逆置,单词顺序不变
题目:将字符串中的单词逆置,单词顺序不变分析:string reverse_worlds(string& s){ int begin = 0;//每个单词的起始位置 int end = 0;//每个单词的尾位置 while (end < s.size()) { begin = end; //注意while()循环的end<s.size()不要...原创 2019-03-12 19:16:58 · 2064 阅读 · 0 评论 -
在字符串中删除特定字符
题目:在字符串中删除特定字符。删除后字符串变为"hi i a",即将原串中包含t、e、s中的都删除掉了。分析:方法(1):从头扫描原串,每遇到一个字符,在要删的串中比一遍,有的话就删除当前字符,然后继续下一个字符的判断。方法(2):由于方法(1)由三步完成:第一:扫描原串 第二:拿着原串中的字符在要删的串中找一遍第三:找到后删除。方法(2)的思路是优化第二、第三步。第二步我们可以用一个数...原创 2019-03-13 12:56:08 · 54043 阅读 · 0 评论 -
构造函数、析构函数中是否可以调用虚函数?
题目:构造函数、析构函数中是否可以调用虚函数?答案是:不能。原因如下:构造派生类对象时,首先调用基类构造函数初始化对象的基类部分。在执行基类构造函数时,对象的派生类部分是未初始化的。实际上,此时的对象还不是一个派生类对象。析构派生类对象时,首先撤销/析构他的派生类部分,然后按照与构造顺序的逆序撤销他的基类部分。因此,在运行构造函数或者析构函数时,对象都是不完整的。为了适应这种不完...原创 2019-04-29 11:20:40 · 1591 阅读 · 1 评论 -
STL六大组件:
STL六大组件:STL(标准模板库)是C++标准库中最重要的组成部分,它不仅是一个可复用组件库,而且是一个包罗算法和数据结构的软件空间。STL充分体现了泛型化思想,它致力于追求复用。在复用的同时,STL还追求效率,比如迭代器萃取机制。总的来说,STL所做的一切都是以复用和效率为目标的。STL有多个版本,linux下面用的SGI版,windows下面的PJ版。此外还有HP版本、RW版本...原创 2019-04-30 08:55:57 · 501 阅读 · 0 评论 -
模板为什么不支持分离编译
https://blog.csdn.net/w_y_x_y/article/details/80299302原创 2019-07-04 07:56:46 · 134 阅读 · 0 评论 -
字符串的循环右移 ,如字符串"abcdefg"循环右移2个字符变成"fgabcde"
题目:字符串的循环右移 ,如字符串"abcdefg"循环右移2个字符变成"fgabcde"分析:方法(1):一个一个移动(每次将最后一个字符单独保存,将剩下的字符挨着后移一个,再将保存的这个字符放到最前面空出来的位置...)方法(2):方法(1)的优化,由于一个一个移效率较低,我们可以计算出要移动的字符数,然后将要移动的字符拷贝到一个临时空间中,然后将剩下的一次性移到它最终该在的位置,在...原创 2019-03-10 22:18:41 · 2247 阅读 · 0 评论 -
C/C++中重要的关键字
C/C++中重要的关键字:1.了解static关键字吗? static可以修饰变量,也可以修饰函数。修饰变量又分为:修饰局部变量、全局变量,修饰局部变量改变的是变量的生命周期,由局部->整个程序,并且存储在静态区,修饰全局变量改变的是链接属性,由外链接->内链接,在C++中还可以修饰类的成员变量,static修饰的成员变量为整个类所有,必须在类外初始化。修饰普...原创 2019-03-14 21:10:12 · 374 阅读 · 0 评论 -
将字符串中的单词位置倒置,如student a an I倒置后是I am a student
题目:将字符串中的单词位置倒置,如student a an I倒置后是I am a student分析:先将整个字符串倒置,然后按照单词倒置,那么单词内部顺序就被倒回来了,而单词之间倒置了,这就达到了我们想要的效果。//先写一个字符串的倒置函数void reverse_str(char* str, int begin, int end){ assert(str); whil...原创 2019-03-10 16:46:22 · 803 阅读 · 0 评论 -
C++中的引用
1.C++中引用的定义在C++中,引用指的是某一变量的别名,对引用得操作与对变量本身操作完全一样。引用的声明方法:类型标识符 &引用名=被引用变量名。例如:int a=10;int &b=a;//b是a的引用,即别名 其中,类型标识符指的是被引用变量的类型。使用引用时应该注意以下几点:(1)一个变量可以被多次引用(取多个别名)(2)引用必须初始化(3)引用只能在原创 2017-07-04 14:33:06 · 281 阅读 · 0 评论 -
C++中函数重载原理
1.C++中,关于一组函数重载,必须有以下几点必要条件:(1)函数名相同(2)形参列表不同(形参个数、形参类型)(3)函数声明在同一作用域中 2.关于重载原理简述:C语言中函数符号与对应的函数名一致,而C++中为了支持函数重载,编译器会对此做一些处理,因此我们不必担心会有命名冲突的担忧。C++实现函数重载的技术手段是函数符号的改名,符号名是在对应的函数名上改编得到的,因此我们可原创 2017-07-04 17:46:18 · 407 阅读 · 0 评论 -
C.C++动态内存管理的一些问题
关于C.C++动态内存管理的一些问题,我们做一下几点讲解:1.C的动态内存管理C中主要以以下几个函数进行动态管理内存:(1)void* malloc(size_t size) 分配长度为size字节的内存块,如果分配成功则返回指向被分配内存的指针,否则返回空指针NULL。当内存不再使用时,应使用free()函数将内存块释放。int* p=malloc(sizeof(int))原创 2017-07-22 08:56:02 · 363 阅读 · 0 评论 -
C++写时拷贝(测试用例String类)
下面向大家介绍C++值拷贝(浅拷贝)、深拷贝、写时拷贝的过程与意义,以及异同点。我们都知道在C++中,每个类都有6个默认的成员函数,拷贝构造函数是很重要的其中一个,它是用一个已有的对象来构造一个新的对象出来。对于一般的类来说,例如日期类,它的成员变量只有一些简单的数据类型,整型,浮点型等拷贝构造函数就用简单的值拷贝,就是一一将成员变量拷贝过去。而对于像字符串类这样特殊的类来说,它的成员变量里面函数原创 2017-07-24 16:17:05 · 475 阅读 · 0 评论 -
C++中关于菱形继承
C++中的继承体系,有单继承、多继承、还有复杂的菱形继承,今天我们只讨论菱形继承,以及菱形继承存在的问题,最后我们针对问题给出解决方案。(1)什么是菱形继承? 顾名思义,菱形继承就是,几个类的继承关系呈菱形状。为此,我们举例解释:题目:有4个类,Person类、Student类、Teacher类、Assistant类,Student、Teacher继承Person,Assi原创 2017-08-02 20:28:50 · 426 阅读 · 0 评论 -
C++中的多态、单继承、多继承、菱形继承、菱形虚拟继承
C++中的继承体系,有单继承、多继承、菱形继承、菱形虚拟继承,以及各类型的对象模型,我们今天做一个简单的剖析(1)什么多态?所谓多态,就是“多种形态”。在面向对象的方法中一般是这样描述多态的:向不同的对象发送同一个消息,不同的对象在接收时会产生不同的行为(即方法)。多态=动态多态+静态多态a.关于静态多态:函数重载b.关于动态多态:构成动态多态的两个必要条件:(1)子类原创 2017-08-02 22:06:23 · 1320 阅读 · 0 评论 -
C++中的模板
1.模板模板是泛型编程的基础。即编写与类型无关的逻辑代码,也是一种复用的方式。C++中的模板分为:模板函数、模板类(1)模板函数函数模板格式:template例子:实现一个比较两个数是否相符template bool IsEqual(const T& left, const T& right){return left==right;}明显的,模板原创 2017-08-06 08:39:30 · 559 阅读 · 0 评论 -
C++中的智能指针
1.智能指针:智能指针就是智能的、自动化的管理指针所指向的动态资源的释放,并且可以如同指针一样使用。智能指针是RALL(初始化立即获取资源)思想的一种实现,其中初始化利用构造函数,之后将资源保存起来最后让析构函数自动清理。 2.引入智能指针原因:总的来说,是防止程序执行流的改变、或者人为因素造成的内存泄露问题,在此我们应该知道,影响执行流改变的常见语句有:goto,抛异常,return,b原创 2017-08-22 10:54:21 · 319 阅读 · 0 评论 -
c++中类型转换操作符
在C语言中,类型转换只需要在变量前加上转换的类型即可,而且转换可以是双向的,但是这种粗暴的类型对付基本类型还可以,对付复杂类型就力不从心了。因此C++提供了四种类型转换操作符:static_cast、dynamic_cast、const_cast、reinterpret(1)static_cast static_cast可以完全代替C风格的类型转换实现基...原创 2019-02-28 12:33:31 · 452 阅读 · 0 评论 -
C语言中的 extern关键字
.h文件中有什么?(1)#define(2)typedef(3)函数声明(4)extern变量C++标准并没有规定头文件中不能定义变量,只不过如果在头文件中定义变量,而该头文件被多次包含的话,会造成变量重定义问题(定义和声明是不同的,一个程序中对变量只能定义一次,声明可以多次)。也就是说头文件中不能放定义,但是有三个例外:(1)static int x=20;(2)类...原创 2019-02-28 20:56:24 · 969 阅读 · 0 评论 -
字符串内容重排序
题目:字符串内容重排序。实现对给定字符串(字符串中包含英文字母、数字、符号),经过处理后的字符串按照"字母、数字、符号"的顺序存放。要求是不改变字母、数字等在原串中先后次序例如字符串"A,2.d?3!e4r87we79",处理后输出结果为"Aderwe2348779,.?!"分析:方法(1):逐次扫描原串,是字母的放在一个动态开辟的地方,是数字的放在另一块地方是其它字符的再放在另一块...原创 2019-03-13 22:20:55 · 1875 阅读 · 0 评论 -
C++实现日期类
题目:C++实现日期类Date.h#pragma once#include <iostream>using namespace std;//日期类class Date{private: int _year; int _month; int _day; static int _count;//用来统计该类一共创建了多少个对象(要在类外初始化)pu...原创 2019-03-09 17:33:27 · 183 阅读 · 0 评论 -
C++的string类
string类称为”字符串类”.它是basic_string模板类的一个实例.(typedef basic_string<char, char_traits, allocator> string)它很像一个可以动态增长的数组,只是数组元素类型是char,并且末尾有字符串结尾标志’\0’。string类对象的构造:string类对象的构造函数有很多不同的形式,即我...原创 2019-03-14 17:33:08 · 130 阅读 · 0 评论 -
计算1+2+...n,要求不能使用乘除法,循环、条件等判断语句
题目:计算1+2+...n,要求不能使用乘除法,循环、条件等判断语句分析:使用两个全局成员变量i,sum,一个每次自增,一个累加,让在构造函数内部完成自增与累加的过程,这样没调用一次构造函数实现一次自增与累加,当调用n次构造函数,就完成这个功能。需要注意的是,直接用数组创建n个对象时不行的,因为数组下标必须是常量不能是变量,解决办法是用new动态创建n个对象,即调用n次构造函数。c...原创 2019-03-10 14:51:02 · 766 阅读 · 0 评论 -
输入一个日期,计算出这个日期是这一年的第多少天。
题目:输入一个日期,计算出这个日期是这一年的第多少天。分析:方法(1):如果我们实现了一个基本的日期类Date的话,可以创建一个日期类对象d1,将其初始化为这一年的第一天(1月1日)然后再创建一个日期类对象d2,将其初始化为输入的这个日期,然后将d2-d1+1就是我们想要的结果,但是这种思路的前提是实现了这个基本的日期类,并且重载一些运算符,比如减等。方法(2):因为每年的每个月的天数都...原创 2019-03-10 15:13:22 · 5679 阅读 · 0 评论 -
二叉树非递归遍历(前序、中序、后续、层序)
(1)前序vector<int> v; if(root==nullptr) return v; stack<TreeNode*> s; TreeNode* cur=root; while(cur || !s.empty()) { ...原创 2019-07-06 10:49:51 · 193 阅读 · 0 评论