C++
文章平均质量分 75
weixin_41157881
这个作者很懒,什么都没留下…
展开
-
memset和sprintf小记
#include#include#includeusing namespace std;struct Test{string a;string b;};int main(){Test ta{“123”,“abc”};cout << ta.a << " " << ta.b << endl;memset(&ta, 0, ...原创 2019-12-30 22:23:46 · 398 阅读 · 0 评论 -
类的继承的实例
#include#include#include#include #include #includeusing namespace std;class Base{public:virtual void display() = 0;};class A :public Base{public:void display(){cout << “A class”...原创 2019-12-30 22:21:28 · 232 阅读 · 0 评论 -
N个括号有多少种合法的组合
两种算法,思想都是左括号始终大于等于右括号,当左括号等于右括号的时候且等于N的时候。记录为1#include#include#include#include #include #include#includeusing namespace std;void display(int x, int y){cout << x << " " << ...原创 2019-12-12 22:13:10 · 666 阅读 · 0 评论 -
C++11的一种多线程安全的单例模式
#include #include using namespace std;class Test{public:Test(){cout << “create Test class” << endl;num++;cout << “create Test class finish” << endl;}void ttt(){st...原创 2019-12-11 23:20:36 · 226 阅读 · 0 评论 -
C++访问控制
#includeusing namespace std;class base{public:int a = 555;private:int b = 666;protected:int c = 777;};class publicTest :public base{public:void fun(){cout << "publicTest: ";cout...原创 2019-12-09 22:42:03 · 109 阅读 · 0 评论 -
类中的枚举变量
#includeusing namespace std;class A{public:enum Test{ONE,TWO,THREE};};int main(){cout << sizeof(A) << endl;//枚举变量不占用类的空间A::Test b = A::TWO;cout << int(b) << end...原创 2019-11-27 20:55:03 · 384 阅读 · 1 评论 -
c++14 lambdas新特性
#include #include using namespace std;int main(){std::unique_ptr<int> p(new int);int x = 5;*p = 11;auto y = [p = std::move(p)]() { std::cout << "inside: " << *p << "\n"...原创 2019-11-26 23:18:23 · 100 阅读 · 0 评论 -
智能指针的使用
#include#include#include#includeusing namespace std;class SreBob{public:SreBob();SreBob(initializer_list il);//大括号初始化的调用的函数int size()const { return data->size(); }bool empty()const { ret...原创 2019-11-25 21:28:00 · 87 阅读 · 0 评论 -
C++重载
#includeusing namespace std;int maxt(int a, int b){if (a > b){return a;}return b;}int maxt(int a, int b,int c){if (a > b && a > c){return a;}else if (b > a &&am...原创 2019-11-24 21:34:45 · 87 阅读 · 0 评论 -
智能指针实现单链表
#include#include#include#includeusing namespace std;struct LinkNode;using sharedPtr = std::shared_ptr;struct LinkNode{int val;sharedPtr next;};class LinkList{private:int length;sharedP...原创 2019-11-23 22:29:16 · 330 阅读 · 0 评论 -
定时器的实现
#include#include#include#includeusing namespace std;#define MSOFDAY (246060*1000UL)void func(char str[100]){cout << sizeof(str) << endl;}class Timer{public:void fun(int num, s...原创 2019-11-19 23:39:31 · 141 阅读 · 0 评论 -
C++模板编程新的小特点
#includeusing namespace std;template<int *p>struct wrapper{int get() { return *p; }void set(int v) { *p = v; }};template<int &p>struct wrapper1{int get() { return p; }void ...原创 2019-11-16 22:45:41 · 85 阅读 · 0 评论 -
一系列测试题目
#includeusing namespace std;void Foo(char str1[100]){cout << "sizeof(str) = " << sizeof(str1) << endl;}void GetM1(char *p){p = (char *)malloc(100);}void test1(void){char ...原创 2019-11-13 22:30:31 · 168 阅读 · 0 评论 -
一系列小的题目
#include#includeusing namespace std;class A{public:virtual void f() = 0;};class B :virtual public A{public:void f(){cout << “B” << endl;}};class C :virtual public A{publi...原创 2019-11-11 21:51:03 · 107 阅读 · 0 评论 -
一系列小的题目
#include#include#include#include #include #include#include#includeusing namespace std;class A{public:A() :c(3), b©, a(b) {}public:int a;int b;int c;};class MyString{public:explici...原创 2019-11-09 23:24:05 · 96 阅读 · 0 评论 -
const_cast、static_cast、dynamic_cast总结实例
#include#include#include#include #include using namespace std;struct SA{int i;};enum enumtest{A=1,B};class Base{public:int m;virtual void fun(){}};class Dclass :public Base{pub...原创 2019-11-06 22:04:17 · 77 阅读 · 0 评论 -
一系列自测题目
#include#include#include#includeusing namespace std;class A{private:A(){cout << “create A” << endl;}int a1 = 100;static A a;static std::mutex mtx;public:static A getA(){i...原创 2019-11-05 23:02:17 · 88 阅读 · 0 评论 -
一系列题目自检
#include#include#include#include#includeusing namespace std;struct LinkNode{int val;LinkNode *next;LinkNode(int val, LinkNode *next = nullptr){this->val = val;this->next = next;}}...原创 2019-11-04 23:24:18 · 150 阅读 · 0 评论 -
如何确定10亿个数中是否存在某数M
一般的情况我们会用for循环来判断某个数是否在一亿的数据中。但是一亿数据进行for循环消耗的时间很大的。时间复杂度为O(N).。在N非常大的时候,时间会很长。在算法有一种位图算法可以实现快速的判断某个数据是否存在于10亿个数据数据中。先给出代码:#includeusing namespace std;int number[1000];void setnumber(int num){...转载 2019-03-10 00:00:35 · 1460 阅读 · 0 评论 -
字典树Trie的简单理解
字典树又叫Trie树,是单词储存的一种树形结构。最典型的的应用是统计、排序和保存大量字符串。可以插入单词、统计单词的个数、公共前缀的单词数量,单词的查找功能等。我们先定义字典树节点的数据结构:typedef struct Node{char value; //表示该节点储存的英文字母Node *child[26];//用孩子表示下个字母的bool isWorld; //表示该节点...转载 2019-03-15 00:13:15 · 145 阅读 · 0 评论 -
一道有意思的算法
假设有一个非空的数组,除了某个元素出现一次外,其他的元素都出现两次,请找出只出现一次的元素。我们可以使用排序或者map的来查找只出现一次的元素。利用map遍历数组,元素已经在map里面的话,该元素的对应的map的value+1,否则该元素的map的value为0,下面的map的算法:int onlyone(int intarr[], int length){map<int, int...转载 2019-03-10 22:52:48 · 74 阅读 · 0 评论 -
如何判断一个数字N是2的M次方
第一次写博客,如何判断N是2的M次方第一次看到这个题目感觉第一印象用while循环处理即可,定义一个sum=1;sum*2,直到sum不小于N时候,退出,然后判断sum=N即可代码如下:bool num4two(int n){int sum = 1;while (sum &lt; n){sum = sum * 2;}return sum==n;}当然为了提高效率,可以使用...转载 2019-03-07 23:24:54 · 412 阅读 · 0 评论 -
求两个链表的第一个公共节点
给顶两个链表,A和B。A的长度为la,B的长度为lb。假设存在公共节点,那么末尾的节点一定是公共的。lb-la的长度是B的链表比A的长的距离。再求第一个公共节点的时候,我们先让B多走lb-la个节点,然后B和A在同步走,当节点相等时,跳出,既是第一个公共节点。代码如下:#includeusing namespace std;typedef struct Node//链表节点定义{in...原创 2019-03-19 22:57:45 · 94 阅读 · 0 评论 -
马拉车算法的C++实现
马拉车算法是专门查找字符串中最长回文子串的一种算法,该算法好像目前只有这么一个功能。他相比于单纯的暴力匹配搜索算法的算法效率提高了很大。单纯的暴力搜索是O(n),但是马拉车算法的算法效率是O(n)。该算法充分利用了回文字符串的特性,来进行回文字符串的查找。大大的提高了查找字符串的效率。#include#includeusing namespace std;string dealStr...转载 2019-03-15 23:35:18 · 841 阅读 · 0 评论 -
C++的const指针的使用注意事项
const关键字在C++中表示常量的意思,但是const的使用很容易使人混淆,特来一记,便于以后查阅。const int a = 11;//a = 5;//不能给常亮赋值int b = 5;cout << “b=” << b << endl;int *p = &b;*p = 10;//非const指针可以通过赋值的方式修改b的值。co...原创 2019-03-17 00:30:00 · 282 阅读 · 0 评论 -
求一个链表的倒数第K个节点
第一字方法,我们可以先计算链表的长度L,然后在让链表的头结点走L-K个节点。那么得到的节点就是我们需要的节点。先是创建链表的代码,根据数组创建:typedef struct Node{int val;Node *next;Node(){this->next = nullptr;}Node(int val){this->val = val;this->ne...转载 2019-03-20 23:20:38 · 176 阅读 · 0 评论 -
二分查找及其举一反三的使用。
典型的二分查找算法,通过对mid不断的判断来确定最终的key值得位置。代码如下:int getnumber(int intarr[], int length, int key){int num = 0;int start = 0;int end = length - 1;while (start <= end)//这里必须是<=,很重要的一点,二分查找的重点{i...转载 2019-03-17 23:50:55 · 125 阅读 · 0 评论 -
康托展开在全排列中使用(C++实现)
在一个全排列中,比如在1,2,3,4,5所有的全排列中,如何确定34152在1,2,3,4,5所欲排列中排第几?康托展开的公式为以1,2,3,4,5为例,那么康托展开的公式为X=a[5](5-1)!+a[4](4-1)!+a[3](3-1)!+a[2](2-1)!+a[1]*(1-1)其中1<=a[i]<=5,a[i]表示(从首位开始算)指的是位于位置i后面的数小于a[i]值的...转载 2019-03-24 23:44:02 · 544 阅读 · 0 评论 -
输入n个整数,求出最小的K个数字
该问题我们可以先维护一个大小为K的数组Karr,然后遍历n个整数,当某个值比Karr的最大的还要小时,就更新该数组。代码如下:#include#include#include#includeusing namespace std;void display(int intarr[], int length){for (int i = 0; i < length; i++){...转载 2019-03-21 23:58:20 · 309 阅读 · 0 评论 -
栈的pop序列和push序列。一个pop序列,一个push序列,如何判断pop序列可以有push序列产生。
pop序列为[1,2,3,4,5],push序列为[1,2,3,4,5],pop序列可以由push序列产生。分析如下:1push pop2push pop3push pop4push pop5push pop栈的特性就是先进后出,设两个序列长度为L,我们在判断某个pop序列是否可以有一个push序列产生的时候,通过把push序列进栈stackint,然后判断栈顶元素是否为pop序列的元...原创 2019-03-26 00:13:44 · 610 阅读 · 0 评论 -
不用乘除算法,不用if、for、while、switch、case等关键字及条件语句,求1+2+3+4+5+....n的和
C++ 的类是个很神奇的的一种语法元素,在C++的语法中有个static的关键字,该关键字在类中的作用是修饰一个静态的变量。例如我们如果我们在想统计类创建的的个数,我们可以在类中定义static变量,每当新类出现的时候,该元素+1,delete某个元素的时候,该元素-1.即可实现统计类创建的的个数。static关键字是个很神奇的东西。他可以保存已经发生的一些数值。下次调用的时候可以再使用。在...转载 2019-03-22 23:26:09 · 386 阅读 · 0 评论 -
有趣的小算法 (1)求子数组的最大和(2)从上往下遍历二叉树
例如:输入一个数组{1,-2,3,10,-4,7,2,-5}的最大子数组为{3,10,-4,7,2},和为18,我们如何求最大子数组的和。在算法中,我们可以定义一个max为0,sum为数组的依次的和,当sum>0的时候,sum和最大值max比较,比max最大值大,更新最大值。sum<0的时候,则sum=0;最后max为0,那么我们就需要考数组是不是都是负数,取最大值的负数即可。代...原创 2019-03-30 00:34:43 · 106 阅读 · 0 评论 -
单链表的翻转和C++ 11 的小特性---可变参数
如何翻转一个单链表呢。在翻转单链表的时候,一,我们需要保留下一个节点,二,对链表节点节点进行翻转。最后返回一个节点,该节点为翻转链表后新的头节点。#include#include#includeusing namespace std;typedef struct node{int val;node *next;node(int val){this->val = val...原创 2019-04-03 23:29:49 · 77 阅读 · 0 评论 -
第一个只出现一次的字符和如何获得一个字符串(如abcd)的全排列
给定一个字符串,求出第一个只出现一次的字符。比如abcdeabcf中第一个只出现一次的字符串为d。第一种方法,我们可以做一个双循环遍历整个字符串,从一个字符串开始,挨个和后面的字符串比较,看后面的字符是否存在相同的字符。不存在直接返回当前字符。但是这个算法的效率比较低,算法效率是O(N2)。我们可以先第一次循环把字符串的字符的个数统计下来。然后再重新遍历字符串,找出第一个出现的字符。我们可以定...转载 2019-03-31 00:01:53 · 256 阅读 · 0 评论 -
翻转句子里面的单词
在C++中,char *point和char[n]的区别在于,char *point的里面的某个位的值是不可改变的。而char[n]的里面某一位的值是可以改变的。代码如下:#includeusing namespace std;int main(){char ch1[20] = “123456789”;char *charp = “abcdefgh”;ch1[1] = ‘a’;//这...转载 2019-03-23 23:48:27 · 411 阅读 · 0 评论 -
给定一个二叉排序树,把该二叉排序树转换成从小到大的双向链表
二叉排序树又叫二叉搜索树。它除了具有一般二叉树的性质还有1、如果二叉树的左子树不为空,那么左子树的所有节点的值都比根节点值要小。2、如果二叉树的左子树不为空,那么左子树的所有节点的值都比根节点值要小。3、二叉排序树的左右子树也都是二叉排序树。如下图所示:我们现在要把一个二叉树变为一个有序的双向链表。比如上图可以变为:1=3=4=6=7=8=10=13=14定义二叉排序树的结构:ty...原创 2019-03-26 23:43:56 · 569 阅读 · 0 评论 -
给一个MXN的矩阵,从左上角开始,顺时针打印该矩阵
单纯的打印矩阵我们都会。直接一个双重循环即可,但是如何从左上角开始,顺时针打印矩阵呢。我们可以设置四个变量,left,rigth,up,down分别表示当前矩阵没有打印的的边界距离,up=1.说明第一行已经打印,这样,我们向上遍历的时候,i=1的时候就可以停止了。同理,rigth,up,down也有类似的功能。代码如下:#include#include#includeusing name...原创 2019-04-05 01:51:59 · 1235 阅读 · 0 评论 -
判断某个数列是不是二元查找树的后序遍历。
给定一个数组序列,判断这个数列是不是二叉查找树的后序遍历。后序遍历是先左节点,再右节点,最后根节点。二叉查找树定义为节点的左子树都小于该节点,该节点的右子树都大于该节点。如果是后序遍历,那么根是最后一个nn,那么数组前面一定有n(0)-n(x)都小于nn,而n(x+1)-n(n-1)都大于nn。然后我们递归判断即可。代码如下:#includeusing namespace std;boo...原创 2019-04-01 00:23:05 · 146 阅读 · 0 评论 -
和为N的连续正整数序列
我们给定一个数M,求连续的正整数序列的和为M。比如100=9+10+11+12+13+14+15+16=18+19+20+21+22。一我们为了处理方便设一个small=1,设一个big=2.。当所求的small到big的和大于M的时候,我们small++,去掉一个较小的数,当我们发现small到big的和小于M,我们big++,增加一个较大的树。直到small-bigm。根据题意至少知道sm...原创 2019-04-06 01:34:00 · 560 阅读 · 0 评论 -
C++指针的引用和指针的指针
C++中,如果声明一个为空的指针变量。然后想通过函数改变它的属性和值,那么我们在函数中就需要使用指针的引用和指针的指针。#includeusing namespace std;typedef struct Test{int val;}Test;void changeTest(Test *t1){cout << &t1 << endl;//打印指针...原创 2019-03-27 23:25:46 · 139 阅读 · 0 评论