
C++
aaaaaaaaaa..
这个作者很懒,什么都没留下…
展开
-
完善Date类
class Date{public: Date(int year = 1900, int month = 1, int day = 1) : _year(year) , _month(month) , _day(day) {} Date(const Date& d) : _year(d._year) , _month(d._month) ...原创 2019-06-19 13:55:14 · 221 阅读 · 0 评论 -
C++异常
1.C语言传统的处理错误的方式传统的错误处理机制:终止程序,如assert,缺陷:用户难以接受。如发生内存错误,除0错误时就会终止程序。返回错误码,缺陷:需要程序员自己去查找对应的错误。如系统的很多库的接口函数都是通过把错误码 放到errno中,表示错误C 标准库中setjmp和longjmp组合。这个不是很常用,了解一下实际中C语言基本都是使用返回错误码的方式处理错误,部...原创 2019-08-29 19:45:06 · 224 阅读 · 0 评论 -
C++智能指针
转载:链接转载 2019-08-29 21:09:32 · 112 阅读 · 0 评论 -
C++多态
不规范的重写:在基类函数加了virtual关键字 ,在派生类中重写的成员函数前不加virtual,也是构成重写的。c++的编译器应该是保证虚函数表的指针存在于对象实例中最前面的位置(这是为了保证取到虚函数表的有最高的性能——如果有多层继承或是多重继承的情况下)接口结成和实现继承普通函数的继承是一种实现继承,派生类继承了基类函数,可以使用函数,继承的是函数的实现。虚函数的继承是一种接口继承...原创 2019-08-29 21:14:48 · 110 阅读 · 0 评论 -
C++继承
#include <iostream>#include <string>using namespace std;class Person{public: void Print() { cout << "name:" << _name << endl; cout << "age:" << _ag...原创 2019-08-29 21:19:08 · 181 阅读 · 0 评论 -
C++类型转换
参考链接C++强制类型的转换有四种static_caststatic_cast用于非多态类型的转换(静态转换),编译器隐式执行的任何类型转换都可用static_cast,但它 不能用于两个不相关的类型进行转换。相当于C语言的隐式类型转换。void test2(){ int i = 1; double d = static_cast<double>( i);//注意要...原创 2019-08-30 10:08:53 · 112 阅读 · 0 评论 -
map+set+平衡二叉树
1.关联式容器STL中的部分容器,比如:vector、list、deque、forward_list(C++11)等,这些容器统称为序列式容器,因为其底层为线性序列的数据结构,里面存储的是元素本身。关联式容器也是用来存储数据的,与序列式容器不同的是,其里面存储的是<key, value>结构的键值对,在 数据检索时比序列式容器效率更高。特点STL 关联容器的底层数据结构...原创 2019-08-31 15:10:36 · 1021 阅读 · 0 评论 -
AVL树
4.2AVL树4.2.1 AVL树的概念二叉搜索树虽可以缩短查找的效率,但如果**数据有序或接近有序二叉搜索树将退化为单支树,查找元素相当 于在顺序表中搜索元素,效率低下。**解决上述问题的方法:当向二叉搜索树中插入新结点后,如果能保证每个结点的左右子树高度之 差的绝对值不超过1(需要对树中的结点进行调整),即可降低树的高度,从而减少平均搜索长度。一棵AVL树或者是空树,或者是具有以下性质...原创 2019-08-31 22:43:11 · 205 阅读 · 0 评论 -
剑指offer C++ 01-29
01.二维数组的查找在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该数。//分析:时间复杂度 O(m+n),m 和 n 分别是行数和列数。空间复杂度 O(1)。 思想是从右上角开始判断,每次判断可以排除一行或一列。class Solution {pub...原创 2019-09-05 15:08:45 · 235 阅读 · 0 评论 -
剑指offer 30-50 C++
30.连续子数组的最大和HZ偶尔会拿些专业问题来忽悠那些非计算机专业的同学。今天测试组开完会后,他又发话了:在古老的一维模式识别中,常常需要计算连续子向量的最大和,当向量全为正数的时候,问题很好解决。但是,如果向量中包含负数,是否应该包含某个负数,并期望旁边的正数会弥补它呢?例如:{6,-3,-2,7,-15,1,2,2},连续子向量的最大和为8(从第0个开始,到第3个为止)。给一个数组,返回...原创 2019-09-21 20:33:00 · 258 阅读 · 0 评论 -
剑指offfer 51-67 C++
51.构建乘积数组给 定 一 个 数 组 A[0,1,…,n-1], 请 构 建 一 个 数 组 B[0,1,…,n-1], 其中B中的元素B[i]=A[0]A[1]…A[i-1]A[i+1]…A[n-1]。不能使用除法。//B[i]其实就是等于 A 中除 A[i]之外的所有元素之积。//从左到右算 B[i]=A[0]*A[1]*...*A[i-1], 从右到左算...原创 2019-09-21 20:38:23 · 220 阅读 · 0 评论 -
选择题OJ2
c++继承体系种构造函数的调用顺序C++继承体系中,初始化时构造函数的调用顺序如下(1)任何虚拟基类的构造函数按照他们被继承的顺序构造(2)任何非虚拟基类的构造函数按照他们被继承的顺序构造 +(3)任何成员对象的函数按照他们声明的顺序构造(4)类自己的构造函数class A{ public: A ():m_iVal(0){test();} virtual...原创 2019-09-28 22:55:04 · 7886 阅读 · 0 评论 -
选择题OJ3 操作系统
一进程刚获得三个主存块的使用权,若该进程访问页面的次序是{1321215123},采用LRU算法时,缺页数是 5 次。 1第一次(缺1) 3 1第二次(缺3) 2 3 1第三次(缺2)1 2 3(刚使用的放在前面未使用的依次后移)2 1 31 2 35 1 2第四次(3是最少使用的所以换出)1 5 22 1 53 2 1第五次(5是最少使用的所以...原创 2019-09-29 20:32:53 · 4881 阅读 · 1 评论 -
OJ of vector
只出现一次的数字//先排序,再双指针对比int singleNumber(vector<int>& nums) { sort(nums.begin(), nums.end()); for(int i = 0, j = 1; j < nums.size(); i += 2, j += 2){ if(nums[i] != nums[j]) ...原创 2019-08-12 14:38:47 · 307 阅读 · 0 评论 -
C&C++内存管理
1.C/C++内存分布栈又叫堆栈,非静态局部变量/函数参数/返回值等等,栈是向下增长的。内存映射段是高效的I/O映射方式,用于装载一个共享的动态内存库。用户可使用系统接口创建共享共享内存,做进程间通信。堆用于程序运行时动态内存分配,堆是可以上增长的。数据段–存储全局数据和静态数据。代码段–可执行的代码/只读常量。2.C语言中动态内存管理方式2.1内存分配方式:从静态存...原创 2019-08-25 18:10:07 · 215 阅读 · 0 评论 -
C++模板
非类型模板参数模板参数分类类型形参与非类型形参。类型形参即:出现在模板参数列表中,跟在class或者typename之类的参数类型名称。非类型形参,就是用一个常量作为类(函数)模板的一个参数,在类(函数)模板中可将该参数当成常量来使用。注意:浮点数、类对象以及字符串是不允许作为非类型模板参数的。非类型的模板参数必须在编译期就能确认结果。模板的特化使用模板可以实现一些与类型...原创 2019-08-25 18:01:35 · 104 阅读 · 0 评论 -
栈和队列
1.栈1.1概念与结构栈:一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端 称为栈顶,另一端称为栈底。栈中的数据元素遵守后进先出的原则。 压栈:栈的插入操作叫做进栈/压栈/入栈,入数据在栈顶。出栈:栈的删除操作叫做出栈。出数据也在栈顶1.2栈的实现栈的实现一般可以使用数组或者链表实现,相对而言数组的结构实现更优一些。因为数组在尾上插入数据的代...原创 2019-06-29 22:32:42 · 151 阅读 · 0 评论 -
C++函数重载 extern “C” 引用 内联函数 auto关键字 nullptr
运算打印符endl:被称为操纵符的特殊值,输入的效果是结束当前行,并将与设备关联的寄存器中的内容刷到设备中。可保证到目前位置程序所残生的所有输出都真正写入输出流中,而不是仅停留在内存中等待写入流。宏的优缺点?优点:1.增强代码的复用性。2.提高性能。缺点:1.不方便调试宏。(因为预编译阶段进行了替换)2.导致代码可读性差,可维护性差,容易误用。3.没有类型安全的检查 。C...原创 2019-08-02 21:34:42 · 225 阅读 · 0 评论 -
二叉树相关OJ 前序,中序后续遍历,,,,,,
前序遍历//迭代 node--->left--->rightvector<int> preorderTraversal(TreeNode* root) {vector<int> res; if (!root)return res;stack<TreeNode*> st;st.push(root);//把根...原创 2019-07-31 10:26:27 · 157 阅读 · 0 评论 -
二叉树及相关知识点总结
1.线性与非线性结构线性结构:一个有序数据元素的集合,线性结构指的是数据元素之间存在着**“一对一”**的线性关系的数据结构;非线性结构:其逻辑特征是一个结点元素可能有多个直接前趋和多个直接后继。常用的线性结构有:线性表,栈,队列,双队列,数组,串;非线性数据结构是1.没有对应关系的 集合结构2.一对多的 树结构3.多对多的 ...原创 2019-07-31 15:20:47 · 212 阅读 · 0 评论 -
string OJ
把字符串转成整数//实现Integer.valueOf(string)的功能class Solution { public: int StrToInt(string str) { int n = str.size(), s = 1; long long res = 0; if...原创 2019-08-09 00:16:29 · 120 阅读 · 0 评论 -
list
list是可以在常数范围内在任意位置进行插入和删除的序列式容器,并且该容器可以前后双向迭代。list的底层是双向链表结构,双向链表中每个元素存储在互不相关的独立节点中,在节点中通过指针指向 其前一个元素和后一个元素。list与forward_list非常相似:最主要的不同在于forward_list是单链表,只能朝前迭代,已让其更简单高 效。与其他的序列式容器相比(arra...原创 2019-08-13 20:45:01 · 110 阅读 · 0 评论 -
stack & deque
deque(发音类似“deck”),是双端队列不规则的首字母缩写,双端队列是动态大小的序列式容器,其可 以像两端进行伸缩。特定的库可以以不同的方式实现deque,但通常都是一种动态数组。不论在何种情况下,它都允许通过 随机访问迭代器直接访问单个元素,可以根据需要动态的伸缩。因此,deque提供了一些与vector相似的功能,但deque在头部和尾部进行数据插入和删除操作更加高 效。与vec...原创 2019-08-13 20:46:30 · 617 阅读 · 0 评论 -
OJ of stack&deque
栈的弹出、压入序列//题目:输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。(注意:这两个序列的长度是相等的)bool IsPopOrder(vector<int> p...原创 2019-08-13 20:47:03 · 205 阅读 · 0 评论 -
C++类与对象
1.类的访问限定符及封装1.1访问限定符C++实现封装的方式:用类将对象的属性与方法结合在一块,让对象更加完善,通过访问权限选择性的将其接口提供给外部的用户使用。【访问限定符说明】public修饰的成员在类外可以直接被访问protected和private修饰的成员在类外不能直接被访问(此处protected和private是类似的)访问权限作用域从该访问限定符出现的位置开始直...原创 2019-08-24 22:29:43 · 141 阅读 · 0 评论 -
string
字符串是表示字符序列的类标准的字符串类提供了对此类对象的支持,其接口类似于标准字符容器的接口,但添加了专门用于操作 单字节字符字符串的设计特性。string类是使用char(即作为它的字符类型,使用它的默认char_traits和分配器类型。string类是basic_string模板类的一个实例,它使用char来实例化basic_string模板类,并用char_trai...原创 2019-08-25 00:24:41 · 601 阅读 · 0 评论 -
vector
vector是表示可变大小数组的序列容器。就像数组一样,vector也采用的连续存储空间来存储元素。也就是意味着可以采用下标对vector的元素 进行访问,和数组一样高效。但是又不像数组,它的大小是可以动态改变的,而且它的大小会被容器自 动处理。本质讲,vector使用动态分配数组来存储它的元素。当新元素插入时候,这个数组需要被重新分配大小 为了增加存储空间。其做法是,分配一个新...原创 2019-08-25 17:59:03 · 251 阅读 · 0 评论 -
程序环境和预处理,命名空间
#define//#define 定义标识符#define MAX 1000#define reg register //为 register这个关键字,创建一个简短的名字#define do_forever for(;;) //用更形象的符号来替换一种实现#define CASE break;case //在写case语句的时候自动把 break...原创 2019-08-25 18:01:03 · 332 阅读 · 0 评论 -
选择题OJ
在(函数代码少、频繁调用 )情况下适宜采用 inline 定义内联函数内联函数在编译时,类似宏替换,使用函数体 替换调用处的函数名,因此适合代码较少调用较多的函数。对象是指一块能够存储数据并具有某种类型的内存空间4指针是对象而引用不是有效的迭代器指向某个元素,或者容器尾元素的下一个位置;其余的都是无效。如果容器为空,begin和end返回同一个迭代器,都是尾后迭代器—&g...原创 2019-09-29 20:34:47 · 944 阅读 · 0 评论