1.vector是什么? vector 基础知识 2.如何实现: 实现代码: #include<iostream> #include<vector> #define count 3 using namespace std; //目标就是完成二维vector的所有操作 int main(void) { vector<vector<int>> vec1(count) ; //二维数组的 vector 定义 //初始化一个3x3的矩阵,数值为 333 for(int i = 0 ;i < vec1.size() ;++i){ for(int j= 0 ;j < count ;++j){ vec1[i].push_back(333); } } //增加一行,数值为444 vector<int> temp ; vec1.push_back(temp); int pos = vec 继续阅读 >>


刘生玺 18/01/01 15:09:44
什么是库 库是写好的现有的,成熟的,可以复用的代码。现实中每个程序都要依赖很多基础的底层库,不可能每个人的代码都从零开始,因此库的存在意义非同寻常。 本质上来说库是一种可执行代码的二进制形式,可以被操作系统载入内存执行。库有两种:静态库(.a、.lib)和动态库(.so、.dll) 所谓静态、动态是指链接。回顾一下,将一个程序编译成可执行程序的步骤: 静态库 之所以成为【静态库】,是因为在链接阶段,会将汇编生成的目标文件.o与引用到的库一起链接打包到可执行文件(.out)中。因此对应的链接方式称为静态链接。 试想一下,静态库与汇编生成的目标文件一起链接为可执行文件,那么静态库必定跟.o文件格式相似。其实一个静态库可以简单看成是一组目标文件(.o 文件)的集合,即很多目标文件经过压缩打包后形成的一个文件。静态库特点总结: 1.静态库对函数库的链接是放在编译时期完成的。 2.程序在运行时与函数库再无瓜葛,移植方便。 3.浪费空间和资源,因为所有相关的目标文件与牵涉到的函数库被链接合成一个可执行文件 下面编写一些简单的 继续阅读 >>


刘生玺 17/12/13 23:42:25
题目描述: 给定一组数字 nums ,其中恰好有两个元素只出现一次,其他所有元素只出现两次。找到只出现一次的两个元素。 例如: 给定nums = [1, 2, 1, 3, 2, 5],回报[3, 5]。 注意: 结果的顺序并不重要。所以在上面的例子中,[5, 3]也是正确的。 你的算法应该运行在线性运行时的复杂度。你能用空间复杂度来实现吗? “我的题目”理解 : 我以为是找到数组中出现一次的数字组合在一起返回就行,且认为数组中的数字都 > = 0 (那也就意味着有的数字可能出现不止两次且出现一次的数字不一定只有两个) 。这样的话,我的解决方案是用 nums 去索引vec #include<iostream> #include<vector> using namespace std; class Solution { public: vector<int> singleNumber(vector<int>& nums) { int max = 继续阅读 >>


刘生玺 17/12/13 22:33:12
1.传值与传引用 形参与实参: (1)形参一定会被初始化 (2)形参名可选,如果没有形参名那么我们就不能使用该形参,所以一般都会有形参名。出现未命名的形参,一般就是说我们在该函数中用不到它,但还是必须给他提供实参。 传值与传引用 传值: (1)发生值的拷贝 (2)形参与实参是两个不同的东西 (3)对形参的操作不会影响实参 传引用 (1)传引用是它对应实参的一个别名 (2)对它操作就是在对实参操作 该注意的几点: (1)使用传引用来避免拷贝。如果实参很大或者根本就不支持拷贝,只能用传引用。 (2)函数不需要改变引用参数的值就用const来修饰。尽可能使用const 2.管理指针形参 (1)使用标记指定数组长度。如:c语言用’\0’来表示一个字符数组的结束 void print(const char *str) { if(str) //指针非空 { while(*str) cout << *str++ & 继续阅读 >>


刘生玺 17/12/09 15:24:05
题目描述: Given a sequence of n integers a1, a2, …, an, a 132 pattern is a subsequence ai, aj, ak such that i < j < k and ai < ak < aj. Design an algorithm that takes a list of n numbers as input and checks whether there is a 132 pattern in the list. Note: n will be less than 15,000. Example 1: Input: [1, 2, 3, 4] Output: False Explanation: There is no 132 pattern in the sequence. Example 2: Input: [3, 1, 4, 2] Output: True Explanation: There is a 132 pattern in th 继续阅读 >>


刘生玺 17/12/08 12:12:52
什么是模式匹配? 给定一个子串,要求在某个字符串中找出与该子串相同的所有子串,这就是模式匹配。也就是我们平常在记事本中的“查找选项”所运用的算法,其实说白了就是让我们编程实现:在一个大的字符串中找到一个小的字符串并返回其第一个匹配字符的下标 BF算法 时间复杂度为O(m×n),m和n分别是模式串与主串的长度。 思路:将目标串S的第一个字符与模式串T的第一个字符进行匹配,若相等,则继续比较S的第二个字符和 T的第二个字符;若不相等,则比较S的第二个字符和T的第一个字符,依次比较下去,直到得出最后的匹配结果 代码实现: #include<stdio.h> #include<string.h> #include<iostream> #define MAX 255 using namespace std ; typedef struct { int count ; char str[MAX]; }PP ; int BF(PP S ,PP T, int pos ) { int i 继续阅读 >>


刘生玺 17/11/26 15:07:00
0.拷贝构造函数 其实就是类与类之间的赋值操作所要调用的函数(因为类对象与普通对象不同,类对象内部结构较为复杂,存在各种成员变量) 代码举例: #include<iostream> using namespace std; class Myclass { private: int a; public: //构造函数 Myclass(int b) { a = b;} //拷贝构造函数 Myclass(const Myclass& C) { a = C.a; } //一般函数 void Show () { cout<<a<<endl; } }; int main() { Myclass A(100); Myclass B = A; //Myclass B(A)也是一样的,调用拷贝构 继续阅读 >>


刘生玺 17/11/24 21:47:02
1 .三种非递归遍历(栈) 所要遍历的树是: 先序 + 中序 思路:就拿先序遍历为例来说吧。 1.访问根节点,根节点入栈,进入左子树。 2.访问左子树的根节点,根节点入栈,进入下一层左子树。 3.重复直到当前节点为空。即到达了最**左下方**的节点 4.如果栈不为空,就从栈顶取出节点,进入其右子树 5.直到当前节点和栈都为空时,结束。(栈为空就是所有的入栈的节点的右子树都访问过了。当前节点为空就代表所有的节点都访问过了) 实现代码: #include<iostream> using namespace std; typedef struct Node { char data ; struct Node * Lchild ; struct Node * Rchild ; }BiNode ,*BiTree ; typedef struct temp{ BiTree ptr; struct temp *next ; }SeqStack 继续阅读 >>


刘生玺 17/11/23 23:06:17
一.基本知识 1. 数学知识 (1)在二叉树的第i层上最多有2^(i-1)个节点 (2)深度为k的二叉树最多有2^(k)-1 个节点 (3)对任意二叉树,若叶子节点数为n0,度(节点拥有子树的个数)为2的节点数为n2,则 n0==n2+1 (4)对于具有n个节点的完全二叉树,如果按照对满二叉树节点连续编号的方式,对所有节点从1开始顺序编号,则对于任意序号为i的节点有: 如果 i==1 ,则没有双亲节点。i>1 ,则双亲节点(是同一个节点)的序号为“i/2” 如果 2i <= n,则节点i的左孩子节点序号为 2i ,否则就没有左孩子 如果 2i + 1 <= n,则节点i的右孩子节点序号为 2i+1 ,否则就没有右孩子 以上知识可以自己画图进行验证,也可以自己进行数学论证(反正我是不会的了~_~) 二. 二叉树的创建(二叉链表) 节点定义: typedef struct Node { char data ; struct Node * Lchild ; 继续阅读 >>


刘生玺 17/11/14 22:51:46
1.容器 容器用来存储数据的,数据可以是用户自定义类型(对象),也可以是预定义类型。一般用的就有(vector,list,deque)那么有什么好处呐?参考这篇博客:博客 2.函数重载 什么是函数重载?(what)在同一作用域内,函数名相同但参数不同的一组函数。这组函数被称为重载函数。为什么需要它?(why)重载函数通常用来命名一组功能相似的函数,这样做减少了函数名的数量,避免了名字空间的污染,对于程序的可读性有很大的好处。 代码示例在对象指针那块 参考学习:函数重载 3.对象指针 顾名思义,就是指向对象的指针,尽量初始化 代码示例: #include<iostream> using namespace std; class Myclass{ private: int m; int n; public: //公有访私有 Myclass() //函数重载 {与下面的Myclass(int x,int y) } { m= 0 继续阅读 >>


刘生玺 17/11/10 21:50:09