C/C++小白扫盲
~AC~
这个作者很懒,什么都没留下…
展开
-
C/C++读入若干连续数据
如果题目要求你读入若干个连续整数,其间用空格隔开,换行符作为输入结束标准,数目不知道,要求你将输入的数排序打印,求max,min,排序等用优先队列实现排序,当然使用set也可以#include <iostream>#include <queue>using namespace std;int main(){ priority_queue<int,vect...原创 2018-12-19 21:51:08 · 2234 阅读 · 1 评论 -
二叉树按层次遍历,并且打印每行结点个数
和层次遍历类似,利用queue性质可以实现。问题关键在于每行开始结束的结点在哪里,只要找到每行开始或结束的地方就可以打印换行,实现按层遍历。思路:用两个指针,last和nlast,last记录正在打印的行的最后一个位置,nlast记录下一行的最后一个位置(如果当前行是最后一行,则nlast不存在)。现在就是怎么找last和nlast了,如果当前打印的位置来到了last,则说明当前行已经打印完毕...原创 2019-01-01 09:13:37 · 2218 阅读 · 0 评论 -
c++ set/map 判断插入是否成功
set/map 里面的key都是唯一的,如果存在,则不能再插入,但是map可以更新value值。这里提供两种方法检测是否插入成功。方法一:#include <iostream>#include <set>using namespace std;int main(){ set<int>my_set; my_set.insert(1); my_se...原创 2019-01-01 09:39:54 · 5685 阅读 · 2 评论 -
stl中的各种容器的比较器
#include <iostream>#include <queue>#include <map>#include <set>using namespace std;struct cmp1 { bool operator()(int a,int b) { if (a<b) { return true; //此时是大根...原创 2019-01-01 20:16:44 · 336 阅读 · 0 评论 -
vector 中利用swap释放内存/修整空间
vector动态数组,大小是只增不减的,若容量不够时,会成倍扩容,但不管是erase还是clear只是删除vector中的元素,容量大小并不会变,所以会存在容量很大,但实际存储的数据很少,造成空间浪费,此时就可以利用swap巧妙地收缩空间,并且元素储存的元素保持不变。#include <vector>#include <iostream>using namespace...原创 2019-01-28 16:52:49 · 1150 阅读 · 0 评论 -
C++ explicit关键字作用
#include <iostream>using namespace std;/*explicit关键字*/class Person {public: Person(int age) :age(age) {}; int getAge() { return age; }private: int age;};class Animal {public:...原创 2019-05-09 20:33:41 · 97 阅读 · 0 评论 -
C++struct和class区别
struct是为了兼容C。这里简要介绍下struct和class的异同点,面试时说出这几点即可。相同点:struct也是一种class,也可以创建对象,也可以有构造、析构函数,也可以使用public、private、protected来封装对象。不同点:struct默认是public级别,也就是没有封装的概念,其内部成员变量、函数的实现细节全部暴露给外界。Tipsstruct中也...原创 2019-05-16 10:37:48 · 107 阅读 · 0 评论 -
C++整数int和字符串string互相转化
一、int转string调用to_string()方法即可,参数是int,返回值是string//int转stringvoid IntToString(int n) { string str = to_string(n); cout << str << endl;}二、string转int两种方法:1:利用atoi()函数,参数是const cha...原创 2019-05-29 21:28:00 · 1074 阅读 · 0 评论 -
一道百度C++面试题---memset能否初始化类对象?
正常情况下,是可以使用metset初始化类对象的,但是如果该类含有虚函数,那么这个对象本身指向虚函数表的指针也会被初始化为null,从而找不到该类的虚函数表,当我们想要利用该类发生多态时,程序崩溃,看例子。class Animal {public: virtual void walking() { cout << "animal walking" << end...原创 2019-06-17 10:40:27 · 548 阅读 · 0 评论 -
链表交叉合并
L1:1 2 3 4 5L2:6 7 8 9 10合并后:1 6 2 7 3 8 4 9 5 10#include <iostream>using namespace std;typedef struct List node;struct List{ int data; struct List* next;};//insert at tailvoid inser...原创 2018-12-25 18:35:44 · 891 阅读 · 0 评论 -
c++ define const区别
编译器处理时间:define是在预编译时处理的,const则是在编译运行时处理的。编译器处理方式:对于define编译器每次处理时只是简单的做替换,不会做类型检测,可能会有安全隐患,并且每次替换都会重新分配内存;对于const编译器会编译检查,会报编译错误,const常量在常量内存区中存储,至始至终只会占用一份内存,不会像define那样每次替换都会重新分配内存。数据类型:define 没有明...原创 2018-12-31 09:38:11 · 791 阅读 · 0 评论 -
二叉树 判断一棵树是否是另一棵树的子树
题目:判断判断一棵树是否是另一棵树的子树,子树的意思是只要包含了一个结点,就得包含这个结点下的所有节点。意思就是二叉树结点的值也要相等 如下图2就是1的子树 如果将第二颗树根节点右孩子data改为2 就不是子树了。思路:将二叉树序列化,转化为2个字符串,再利用kmp算法或stl中的find()函数即可,若结点为空用#代表data 二树先序序列化为 1_#8_7##9##_ 用"_"表示一个结...原创 2018-12-26 13:30:00 · 2335 阅读 · 0 评论 -
判断两棵树是否同构
同构 就是结构相同 数据域不管 每个结点度相同下图2棵树是同构的 但是如果左边的树加了红色结点,则不同构思路:二叉树序列化 也可以参考下面的链接https://blog.csdn.net/qq_42673507/article/details/85260617#include <iostream>#include <string>using namespac...原创 2018-12-26 16:12:01 · 1480 阅读 · 0 评论 -
大小端测试及转换
大端方式:big-endian 低位数据放在内存高位小端方式:little-endian 低位数据放在内存低位#include &lt;iostream&gt;using namespace std; void convert(unsigned int* a) { *a = ((*a &amp; 0Xff000000) &gt;&gt; 24) //异或运算 ^ ...原创 2018-12-26 20:47:23 · 214 阅读 · 1 评论 -
判断链表是否有环
有环单链表 就是链表尾结点不指向null,而是任意一个单链表结点思路一:利用set 遍历链表,依次将结点放入set中,第一个放入失败的就是第一个入环结点,否则没有环,但是空间复杂度为O(n)。void hoop1( node* head) { set<node*, cmp>s; node *p = head; while (p != NULL) { node* q = ...原创 2018-12-27 18:40:11 · 123 阅读 · 0 评论 -
二叉树三种遍历递归及非递归实现
自己把握好入栈出栈时间即可实现#include <iostream>using namespace std;#include <stack>struct btnode { char data; struct btnode *lchild; struct btnode *rchild;};//初始化二叉树void create_btree(btnode *...原创 2018-12-27 19:57:47 · 803 阅读 · 0 评论 -
实现vector的swap函数误区
今天coding的时候想实现vector的swap函数,刚开始是这样写的,发现调用swap后原来的vector里面的值根本没有发生改变,想了许久,才发现没有取引用,vector作为一个类,不传引用仅仅是发生拷贝构造了一个局部对象,改变的只是局部对象里的值。void swap(vector<int>v, int a, int b) { int temp = v[a]; v[a] =...原创 2018-12-29 00:33:02 · 1617 阅读 · 0 评论 -
快排 quicksort
快排,采用分治法。void my_swap(vector<int>&v,int a,int b) { int temp = v[a]; v[a] = v[b]; v[b] = temp;}void quickSort(vector<int>&v, int begin, int end) { if (end >= begin) { ...原创 2018-12-29 00:35:34 · 147 阅读 · 0 评论 -
就地反转链表
就地反转,就是空间复杂度O(1)#include <iostream>using namespace std;typedef struct List node;struct List{ int data; struct List* next;};//insert at tailvoid insert(node* &L, int num) { node...原创 2018-12-25 15:39:42 · 117 阅读 · 0 评论 -
C/C++define宏定义的坑
#define POW(X) X*Xcout << POW(5) //输出25cout << POW(2 + 3) //输出11 因为编译器处理成了2 + 2*3 + 3 //正确宏定义方式#define POW(X) ((X) * (X)) cout << POW(2 + 3) //输出25...原创 2019-08-28 09:54:05 · 663 阅读 · 0 评论