C++
Steve_Abelieve
致虚极,守静笃。
展开
-
【算法】1.输出数组最大连续区间的和 2. 最长不含重复字符的字符串
1.输出数组最大连续区间的和动态规划:设f(i) 为长度i的最大连续区间的和。则有f(i) = f(i-1) +a(i) 如果f(i-1)>0f(i) = a(i) 如果f(i-1)<0依次从小大求解f(i)的最大值 int nCurSum = 0; int nBiggestSum = 0; for (int i=0; i< n*m; i++) { if (nCurSum <=0) { nCu原创 2020-09-06 13:35:10 · 386 阅读 · 0 评论 -
菱形继承的内存布局是怎么回事呢?访问时,又会出现什么情况?
首先,我们看一下菱形继承(也叫钻石继承)的类之间的关系,如下图: 这样的话,那D类有两个B类成员吗?,访问的话岂不是两个同名吗?那我们验证一下, 用代码表示的话就是://菱形继承#include<iostream>using namespace std;//基类Bclass B{public: int _b;};//基类C1,公有继承Bclass C1 :public原创 2017-02-25 21:05:02 · 1208 阅读 · 0 评论 -
写一个高效且通用的拷贝函数
通用的拷贝函数呢,对于大部分内置类型来说,都是可以直接拷贝的,我们调用memcpy()就可以直接完成,并且效率也很高。但是出现类似于string类时,直接用mempy()就会出现浅拷贝的问题。这时,我们就需要对各种类型进行选择,选择合适的拷贝方式。【思路】:首先,我们会考虑下多传一个参数进行判断一下,这样很容易忘记,有没有更好的办法呢? 接下来我们可能会选择定义一个对应类型的函数:-》对于任何类型原创 2017-03-21 02:37:34 · 468 阅读 · 0 评论 -
写一个通用的冒泡排序函数
提到通用,我们首先想到的就是模板了。 函数内部就是冒泡排序的实现了,我们看一下。//我们先写一个升序排列,一会再对它进行改造一下template<typename T>void BubbleSort(T*arr,size_t size){ for (size_t i = 0; i < size - 1; ++i)//因为只需要排size-1个数,最后一个数自动排序 {原创 2017-03-21 02:46:07 · 3541 阅读 · 0 评论 -
C++动态内存管理核心知识点总结
动态内存管理核心: 首先,我们来重载一下operator new ();进行预处理,给我们打印一些有用的 信息,比如:当前定位的行号,开辟空间的大小(方便我们对于内存泄漏的检查)#include<iostream>using namespace std;class Test{public: Test() { cout << "Test()" << end原创 2017-03-12 01:35:28 · 464 阅读 · 0 评论 -
模板与泛型编程
泛型编程 通俗地讲,泛型编程:即是指具有在多种数据类型上皆可操作的含意,与模板有些相似,是代码服复用的一种手段,模板是泛型编程的基础。 模板引发的问题:#include<iostream>using namespace std;template<typename T>int compare(T t1, T t2){ if (t1 < t2)return -1; if (t1原创 2017-03-11 15:03:46 · 411 阅读 · 0 评论 -
面向对象三大特性之一 多态
首先,我们看一下百科的解释:多态(Polymorphism)按字面的意思就是"多种状态"。在面向对象语言中,接口的多种不同的实现方式即为多态。通俗的讲,就是同一个东西表现出多种状态,在面向对象的描述中就是同一个函数接口,实现多种不同的表现方式。【静态多态】:编译器在编译期间完成的,编译器根据函数实参的类型(可能会进行隐式类型转换),可推断出要调用那个函数,如果有对应的函数就调用该函数,否则出现编译错原创 2017-03-11 01:28:23 · 10945 阅读 · 0 评论 -
全局变量,extern和static以及命名空间的区别
全局变量与extern和static以及命名空间的区别全局变量只是在声明它的文件中有效,假如在另一个文件中声明定义了一个相同名称的全局变量,则在后续使用这两个变量的时候会产生名字上的冲突,解决的办法就是将其中一个全局变量的声明写在未命名的命名空间中,这样可以防止在另一个文件中使用同名变量的时候出现编译上的错误。原因是未命名的命名空间的所有成员在其他文件中都是不可见的,因此也就间接的解决了不同文件中相原创 2017-01-13 17:34:05 · 2896 阅读 · 0 评论 -
新概念“右值引用”和 ”移动构造函数”是怎么回事?
左值与右值每一个C++表达式,要么是左值(lvalue),要么是右值(rvalue)。左值是生存期超过此表达式的对象,所有分配了名称的变量(包括const类型的变量)都是左值;右值基本都是临时变量,只在该表达式有效,它主要包括以下一些情况: 数值型的常量表达式,如:1+2。 字面字符串(Literal),如:”hello”。 在表达式中临时构造的对象。 返回类型非引用的函数的返回值。左值引翻译 2017-01-13 17:05:23 · 627 阅读 · 0 评论 -
模拟实现Boost库中的智能指针(上)
智能指针(英语:Smart pointer)是一种抽象的数据类型。在程序设计中,它通常是经由类模板(class template)来实做,借由模板(template)来达成泛型,通常借由类(class)的析构函数来达成自动释放指针所指向的存储器或对象。起初在C++标准库里面是没有智能指针的,直到C++11中才加入了shared_ptr和unique_ptr,weak_ptr。最早的智能指针在Boos原创 2017-03-31 02:25:24 · 379 阅读 · 0 评论 -
如何实现一个异常处理机制?
在C语言阶段,对于异常处理,我们是这样解决的: 但是,对于错误类型的描述却是很少,我们无法立即判断出错误的类型。 不过,在C++中我们可以后将其信息封装成为一个抽象基类,然后继承,对错误进行分类,然后利用多态的特性,对其错误进行准确的描述:#include<iostream>#include<string>using namespace std;//实现一个异常处理机制//要实现多态->进行原创 2017-03-25 00:22:25 · 662 阅读 · 0 评论 -
浅析C++容器
在面向对象的语言中,大多引入了容器的概念。那么 什么 是 容器?实质上就是一组相同类型对象的集合,但是它又不仅仅像数组那样简单,它实现了比数组更复杂的数据结构,当然也实现了比数组更强大的功能。C++ 标准模板库里提供了10 种通用的容器类,它基本上可以解决程序中遇到的大多数问题。 现在我主要来说明这10 种通用容器的功能用途以及相互之间的相同与异同。但是在这里,我不提倡一开始就着手从这10 种容翻译 2017-04-03 01:33:51 · 988 阅读 · 0 评论 -
阶段性笔试总结
一,选择题 (1)隐式类型强转 警告: 1.类型提升由 符号位 和 数据类型 决定,符号位为1,扩展前面补1。无符号数扩展前面补0。 2.进行数据识别按照低位个数识别。 (2)内存分配 结构体,位端进行对齐时,当对齐数与默认对齐数冲突时,去取其中的较小值。结构体整个对齐时,满足结构体成员中的最大对齐数能对其且满足结构体整体对齐时即可。 (3)类型强转 类型强转不改变所要强转地原创 2016-12-15 17:25:47 · 386 阅读 · 0 评论 -
求迷宫出路以及最优解,小试牛刀。
迷宫求出路是件很简单的事情,相信大家一定能够掌握。 有两种方法:1.回溯法 2.递归法【回溯法】:用栈来保存所走过的路径,将他们入栈,等到无路(四个方向都走完了)那就退回到上一步中,再次进行试探。 注意:每走过一个路径时,对它进行标记,方便我们进行探测。这里:我们把回溯过的路径记为3,走过但没回溯的路径标记为2 提醒大家:先看主函数,建立框架在进行细节上的突破。//完成迷宫#pragma w原创 2017-03-17 02:12:55 · 928 阅读 · 0 评论 -
C++编程常见错误之-类中的常量
1.const与#define的比较两点: 1.cosnt常量有数据类型,而宏常量没有数据类型,编译器可以对前者进行静态数据类型安全检查,而对后者只进行字符替换,没有安全检查,并且会在字符替换时可能会产生意料不到的错误(边际效应)。2.有些集成化的调试工具可以对const常量进行调试,但是不对宏常量进行调试。2.类中的常量 2.1错误用法://类中的常量class A{public:原创 2017-04-04 15:36:53 · 1122 阅读 · 0 评论 -
结构体对齐方式详解
结构体 对齐原因 1、平台原因(移植原因): 不是所有的硬件平台都能访问任意地址上的任意数据的; 某些硬件平台只能在某些地址处取某些特定类型的数据,否则抛出硬件异常。 2、性能原因:数据结构(尤其是栈)应该尽可能地在自然边界上对齐。 原因在于,为了访问未对齐的内存,处理器需要作两次内存访问;而对齐的内存访问仅需要一次访问。结构体内存对其规则: 1.第一个成员在与结构体变量偏移量为0的地翻译 2016-11-29 21:53:28 · 1946 阅读 · 2 评论 -
高精度大数求幂
题目Problems involving the computation of exact values of very large magnitude and precision are common. For example, the computation of the national debt is a taxing experience for many computer systems原创 2017-06-04 21:04:37 · 584 阅读 · 0 评论 -
寒武纪一面
1.vector中resize() 和 reserve() 函数的区别? reserve 容器预留空间 ,但并不真正创建对象,在创建对象前,不能引用容器内元素, 因此加入元素后,需要push_baxck() 和 insert()函数 resize() 改变容器大小,并且创建对象。调用函数后,可以直接引用容器内对象。 reserve()只有一个参数, 即需要预留容器的空间 res原创 2017-09-30 12:25:46 · 3939 阅读 · 0 评论 -
C++构造函数、析构函数必须要给成公有的吗?
C++构造函数、析构函数必须要给成公有的吗?答案是:一、一个类的析构函数只能有一个,也不能重载?1.类的析构函数对象生命周期结束后,由系统自动调用, 2.该函数不需要参入任何参数,不需要传入任何参数,要想传入参数,构成重载,则会造成二义性,这一点跟构造函数不同,构造函数可以根据传入的参数,构造出合适的对象,当然也可以重载。 析构函数可以显式调用,而析构函数系统负责调用,程序无法控制其调原创 2017-02-24 21:54:32 · 4781 阅读 · 0 评论 -
C结构体与C++结构体的区别以及C++结构体与C++类的区别
为了方便大家理解,导图简单整理了一下。后续我会不断推出C++学习过程中的总结,如果喜欢的话,可以私聊我。 C++结构体与C++类的区别: 主要的区别有两个:原创 2017-02-24 20:44:40 · 616 阅读 · 0 评论 -
不撞南墙不回头-深度优先搜索
book[]数组对元素进行标记,进行判断遍历#include<stdio.h>#include<windows.h>int a[10], book[10], n;void dfs(int step){ int i; if (step == n + 1) { for (i = 1; i <= n; i++) { pr原创 2017-02-02 11:51:48 · 824 阅读 · 1 评论 -
C++友元函数基础练习
#include<iostream>#include<string.h>using namespace std;/*** 定义Time类* 数据成员:m_iHour, m_iMinute,m_iSecond* 成员函数:构造函数* 友元类:Watch*/class Time{ friend class Watch;public: Time(int hour, int原创 2017-01-13 23:28:42 · 1458 阅读 · 0 评论 -
用宏实现类成员的定义、set和get函数
细细想一下,还是很简单的,在预处理阶段宏进行简单的替换(当然也可以把我们的代码即对函数的定义替换进去)。 要用宏完成完成这三件事情: 1.需要传入数据的类型,使得可以处理不同的数据类型 2.预处理后:进行特定的替换,完成声明,set,get的代码编写 3.因为是在类中使用该宏,所以安全起见,需要加替换后的限定符#define SetGetParam(Type,name) \ priv原创 2017-01-14 17:21:01 · 1672 阅读 · 0 评论 -
C++运算符重载基础性练习
综合练习 定义Coordinate类 数据成员:m_iX, m_iY 成员函数:构造函数 重载“–”运算符(分为前置和后置、一元),重载“+”运算符(二元)#include <iostream>using namespace std;/** * 定义Coordinate类 * 数据成员:m_iX,m_iY * 成员函数:构造函数 * 重载--运算符,重载+运算符 */class原创 2017-01-14 17:03:36 · 438 阅读 · 0 评论 -
C++几种模板函数基础练习
模板函数关键字: template typename class typename 与class 可以混用#include<iostream>#include<string.h>using namespace std;/***********************//*函数模板要求定义函数模板display,分别使用函数模板*//***********************/te原创 2017-01-14 19:21:44 · 424 阅读 · 0 评论 -
C++类模板应用基础练习
#include<iostream>#include<string.h>using namespace std;/*****************************//*类模板(掌握其定义以及类模板的使用) 定义类模板MyArray 成员函数:构造函数 、析构函数、display函数 数据成员:m_pArr*//*****************原创 2017-01-14 20:11:32 · 420 阅读 · 0 评论 -
C++模板灵活应用
定义一个矩形类模板 该模板中含有计算矩形面积和周长的成员函数 数据成员为矩形的长和宽。#include <iostream>using namespace std;/** * 定义一个矩形类模板Rect * 成员函数:calcArea()、calePerimeter() * 数据成员:m_length、m_height */template<typename T>class Rec原创 2017-01-14 20:31:25 · 375 阅读 · 0 评论 -
C++标准模板库基础练习(必会)
#include <iostream>#include<string>#include<stdlib.h>#include<vector> //vector向量#include<list> //list链表#include<map> //map表示映射using namespace std;/**********************************************原创 2017-01-14 22:25:42 · 640 阅读 · 0 评论 -
数据结构之队列基础练习
数据结构:相互之间存在一种或多种特定关系的数据元素的集合。首先,我们先学习队列: 队列(FIFO)属性:先进先出(First in first out),现实生活中常见的队列就是:排队买票,先到先买。 队列是可以放任何数据类型的,也就是说队列的结构基本上只有一种。不同的队列只是放的数据类型不一样而已。掌握一种,吃透,其他的也是很容易上手的。队列分为:普通类型、环形两种。#include<iost原创 2017-01-15 11:57:59 · 430 阅读 · 0 评论 -
数据结构之【栈】以及【模板类】基础练习
用模板的方法实现一个通用的栈类 注意:为了保证模板的通用性,遍历类的时候需要重载运算符<<#include<iostream>#include<string>#include<stdlib.h>using namespace std;/**********************************************//* 栈 模板类 要求: MyStack(i原创 2017-01-15 17:10:50 · 507 阅读 · 0 评论 -
C++多态基础性练习
/*******************************************/ /*动态多态、虚函数 要求: 1.定义Shape类,成员函数:calcArea(),构造函数、析构函数 2.定义Rec类,成员函数:calArea(),构造函数、析构函数 数据成员:m_dWidth,m_dHeight 3.原创 2017-01-12 09:50:25 · 979 阅读 · 0 评论 -
C和C++互相调用 以及 extern "C"的用法
转载地址:http://blog.sina.com.cn/s/blog_6dd65c6f01010lon.html 首先,先看一下下面这个例子: 它到底有什么用呢,这样的问题会出现在面试or笔试中,我觉得作为一个学C++的童鞋,应该了解一下。下面我就从以下几个方面来介绍它: 1、#ifdef _cplusplus/#endif _cplusplus 2、extern “C” 2.1、e转载 2017-01-12 21:04:07 · 723 阅读 · 1 评论 -
函数调用约定
函数调用约定 编辑词条 函数调用约定,是指当一个函数被调用时,函数的参数会被传递给被调用的函数和返回值会被返回给调用函数。函数的调用约定就是描述参数是怎么传递和由谁平衡堆栈的,当然还有返回值。中文名 函数调用约定 调用堆栈清理 调用者清除栈 几种类型 __stdcall,__cdecl,__fastcall 参数传递顺序 从右到左依次入栈 目录 1函数调用约定的含义翻译 2017-01-12 23:27:30 · 393 阅读 · 0 评论 -
二叉树【数组实现】基础练习
/*************************/ /*二叉树(数组表示)课程要求:完成数的基本操作 1.树的创建与销毁 2.树中结点的搜索 3.树中结点的添加与删除 4.树中结点的遍历 BOOL CreateTree(Tree**pTree,Node *pRoot);//创建树 void DestoryTree(Tree*pTree);//销毁树 Node *SearchNod原创 2017-01-23 12:27:53 · 616 阅读 · 0 评论 -
二叉树【链表实现】基础练习
这是二叉树结构图: 可以看出每个节点都有一个数据域、一个索引、三个节点指针:父节点指针、左孩子结点指针、右孩子结点指针。这样才能根连着枝再连着叶 父节点相当于单链表的指针,把根和非终端节点连接在一起。 demo.cpp/**************************************//*二叉树:链表实现Tree();原创 2017-01-23 16:49:58 · 342 阅读 · 0 评论 -
【图的实现】“广度优先搜索遍历”以及“深度优先搜索遍历”必会
/* 图的存储与图的遍历*//* A / \ B D /\ /\ C F G H \/ E A B C D E F G HA 0 1 0 1 0 0 0 0B 1 0 1 0 0 1 0 0C 0 0 1 0 0 0D 0 0 0 1 1EFGH实现这样一个图,用广度优先搜索和深度优先分别原创 2017-01-24 15:24:57 · 548 阅读 · 0 评论 -
最小生成树之普利姆算法
void CMap::primTree(int nodeIndex){ int value = 0; int edgeCount = 0; vector<int>nodeVec; vector<Edge>edgeVec; nodeVec.push_back(nodeIndex); cout << m_pNodeArray[nodeIndex].m_c原创 2017-01-25 00:16:44 · 433 阅读 · 0 评论 -
C++String类的实现
String类的简单实现:包括构造函数、拷贝构造函数、赋值函数、析构函数、友元输出函数的各个版本实现。#include<iostream>#include<malloc.h>using namespace std;//2、写出普通版本深拷贝的String类,并实现以下函数(不能调用库函数)//// 不能使用库函数//size_t Size()const;//size_t Lengh()co原创 2017-02-22 22:35:34 · 367 阅读 · 0 评论 -
【C的结构体与C++的不同】 以及 【C++ 的类的和结构体区别】
C与C++中结构体的比较C中的结构体和C++中结构体的不同之处:在C中的结构体只能自定义数据类型,结构体中不允许有函数,而****C++中的结构体可以加入成员函数。 在C语言中,可以定义结构体类型,将多个相关的变量包装成为一个整体使用。在结构体中的变量,可以是相同、部分相同,或完全不同的数据类型。在C语言中,结构体不能包含函数。在面向对象的程序设计中,对象具有状态(属性)和行为,状态保存在成员变量原创 2017-01-13 19:55:28 · 490 阅读 · 0 评论