![](https://img-blog.csdnimg.cn/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
c++
文章平均质量分 70
thetffs
这个作者很懒,什么都没留下…
展开
-
static_cast、const_cast、reinterpret_cast
static_cast:1、用于显示转化,将较大的算术类型转换成较小的算术类型2、用于从void*中将丢失的指针,转换出来double d =3.14;void * p= &d ; //任何非常量对象的指针都能转换成void *double * ptr =static_cast<double *>(p);const_cast...原创 2021-09-07 21:18:14 · 102 阅读 · 0 评论 -
c++_char、char*、const char*、string、char的相互转换
#include "stdafx.h"#include<iostream>#include<string>using namespace std;int main(){ //1 char * 转换成 const char * char * tmp = "candle"; const char * p1 = tmp; cout << "p1 is " << *p1 << endl; // 2 const char * 转原创 2021-01-12 13:11:54 · 370 阅读 · 0 评论 -
C++_学习速记
1、运算符优先级优先级由高到低:.成员选择(对象)->成员选择(指针)++后置自增运算符–后置自减运算符从左到右结合*取值运算符&取地址运算符++前置自增运算符–前置自减运算符从右到左结合2、free()函数用来释放动态分配的内存,如malloc()。必须要有指针指向malloc()动态分配的内存,否则容易出现野指针3、memcpy()函数函数原型 void *memcpy(void * dst , void * src, size-t size)函数作用:将原创 2020-12-22 16:02:00 · 512 阅读 · 0 评论 -
C++ 浅析深拷贝和浅拷贝
写在前面本文解释了什么是浅拷贝、深拷贝。记载了使用深拷贝解决浅拷贝导致内存重复释放的具体方法-重载拷贝构造函数和赋值运算符重载函数。文章最后注明了使用重载拷贝构造函数和赋值运算符重载函数的具体情况。浅拷贝浅拷贝又叫值拷贝,本质上来说拷贝的目标对象和源对象用的是同一份实体,只是引用的变量名不同而已,访问的还是同一块内存空间。假设有一个String类,String s1;String s2(s1);在进行拷贝构造的时候将对象s1里的值全部拷贝到对象s2里。此时若类中没有重载拷贝构造函数,当进行对象赋值操作原创 2020-12-18 21:35:04 · 246 阅读 · 1 评论 -
数据结构与算法之美_26_红黑树
什么是红黑树一颗红黑树需要同时满足以下4个条件:定义1:根节点是黑色的;定义2:每个叶子节点都是黑色的空节点(NIL),也就是说,叶子节点不存储数据;定义3:任何相邻的节点都不能同时为红色,也就是说,红色节点是被黑色节点隔开的;定义:4:每个节点,从该节点到达其可达叶子节点的所有路径,都包含相同数目的黑色节点;如何实现一个红黑树1、插入操作红黑树规定,插入的节点必须是红色的。而且,二叉查找树中新插入的节点都是放在叶子节点上。①如果插入节点的父节点是黑色的,那我们什么都不用做,它仍然满足红黑原创 2020-12-10 21:50:30 · 57 阅读 · 0 评论 -
数据结构和算法之美_24_二叉查找树
二叉查找树(Binary Search Tree)二叉查找树要求,在树中的任意一个节点,其左子树中的每个节点的值,都要小于这个节点的值,而右子树节点的值都大于这个节点的值。二叉查找树支持快速的查找、插入、删除操作。需要掌握的二叉查找树的操作查找、插入、删除、查找最大结点、查找最小结点、查找前驱结点、查找后继结点、中序遍历二叉查找树输出有序序列二叉查找树的操作–查找我们先取根节点,如果它等于我们要查找的数据,那就返回。如果要查找的数据比根节点的值小,那就在左子树中递归查找;如果要查找的数据比根节点的原创 2020-12-22 15:03:36 · 75 阅读 · 0 评论 -
数据结构和算法之美_23_二叉树
带着问题去学习:1、二叉树有哪几种存储形式?什么样的二叉树适合用数组去存储?树(Tree)比如下面这幅图,A 节点就是 B 节点的父节点,B 节点是 A 节点的子节点。B、C、D 这三个节点的父节点是同一个节点,所以它们之间互称为兄弟节点。我们把没有父节点的节点叫做根节点,也就是图中的节点 E。我们把没有子节点的节点叫做叶子节点或者叶节点,比如图中的 G、H、I、J、K、L 都是叶子节点。关于“树”,还有三个比较相似的概念:高度(Height)、深度(Depth)、层(Level)。二叉树(原创 2020-12-13 18:33:02 · 169 阅读 · 1 评论 -
数据结构和算法之美_21_哈希算法
什么是哈希算法?将任意长度的二进制串映射为固定长度的二进制串的方法就叫哈希算法。通过原始数据映射后得到的二进制串就叫哈希值。哈希算法需要满足什么要求?1、从哈希值不能反向推导出原始数据(所以哈希算法也叫单向哈希算法);2、对输入数据非常敏感,哪怕原始数据只修改了一个 Bit,最后得到的哈希值也大不相同;3、散列冲突的概率要很小,对于不同的原始数据,哈希值相同的概率非常小;4、哈希算法的执行效率要尽量高效,针对较长的文本,也能快速地计算出哈希值。实际开发中如何使用哈希算法解决问题1、业界常用的原创 2020-12-22 14:58:31 · 211 阅读 · 0 评论 -
数据结构与算法之美_16_二分查找变形
四个需要掌握的二分查找变形问题变体一:查找第一个值等于给定值的元素public int bsearch(int[] a, int n, int value) { int low = 0; int high = n - 1; while (low <= high) { int mid = low + ((high - low) >> 1); if (a[mid] > value) { high = mid - 1; } else原创 2020-12-22 15:10:37 · 112 阅读 · 0 评论 -
数据结构与算法之美_15_二分查找
二分查找什么是二分查找?二分查找针对的是一个有序的数据集合,每次都通过跟区间的中间元素对比,将待查找的区间缩小为之前的一半,直到找到要查找的元素,或者区间被缩小为 0。二分查找的查找速度为 O(logn)区间大小为n的一组数据,查找次数至多为k次,此时n/(2^k) = 1,因此时间复杂度为O(logn)。二分查找的非递归实现int binary_search(int a[], int n , int value){ int low = 0; int high = n - 1; wh原创 2020-12-22 15:11:01 · 154 阅读 · 0 评论 -
数据结构与算法之美_14_排序优化
编程语言提供的排序算法c语言:qsort()函数C++的STL:sort() , stable_sort()函数JAVA:Collections.sort()如何选择合适的排序算法实际应用中我们选用时间复杂度为O(nlogn)的排序算法1、从实际应用场景考虑线性排序算法的时间复杂度比较低,适用场景比较特殊。所以如果要写一个通用的排序函数,不能选择线性排序算法。2、从数据规模考虑小数据规模选用时间复杂度为O(n^2)的排序算法,大数据规模选用时间复杂度为O(nlogn)的排序算法。所以,为原创 2020-12-22 15:12:26 · 110 阅读 · 0 评论 -
数据结构和算法之美_13_排序
线性排序时间复杂度为O(n)的排序算法称为线性排序,常见的线性排序包括桶排序、计数排序、基数排序。桶排序(Bucket sort)核心思想是将要排序的数据分到几个有序的桶里,每个桶里的数据再单独进行排序。桶内排完序之后,再把每个桶里的数据按照顺序依次取出,组成的序列就是有序的了。桶排序对排序数据的要求非常苛刻首先,要排序的数据需要很容易就能划分成 m 个桶,并且,桶与桶之间有着天然的大小顺序。这样每个桶内的数据都排序完之后,桶与桶之间的数据不需要再进行排序。其次,数据在各个桶之间的分布是比较均匀的原创 2020-12-22 15:12:46 · 80 阅读 · 0 评论 -
数据结构和算法之美_12_归并排序、快速排序
归并排序(merge sort)一、什么是归并排序?使用归并排序对一组数据排序,首先将数据分为两个部分,再对两部分数据重新排序,最后将排序后的两部分数据合并成一组数据并使它有序。归并排序算法采用了分治思想,分治就是将一个大问题分解成各个小的子问题来解决,和用递归解决问题的思路很像,事实上使用分治思想解决问题也需要用到递归的编程技巧。void * merge(int a[], int p, int q, int r){ int *tmp; int i, j, k; tmp = (int *)原创 2020-12-11 13:05:49 · 118 阅读 · 1 评论 -
数据结构与算法之美_11_排序
需要掌握的8个排序算法冒泡排序、插入排序、选择排序、归并排序、快速排序、计数排序、基数排序、桶排序。学习排序算法需要掌握什么?1、算法思想2、代码实现3、算法执行效率思考插入排序和冒泡排序的时间复杂度相同,都是 O(n2),在实际的软件开发里,为什么我们更倾向于使用插入排序算法而不是冒泡排序算法呢?冒泡排序对一组数据进行排序,一次冒泡是依次比较相邻的两个数据,若满足顺序要求则不对元素进行交换,若不满足排序要求,怎交换元素位置。1、具有n个元素的一组数据,最多需要进行n次冒泡2、每次冒原创 2020-12-22 15:13:07 · 97 阅读 · 0 评论 -
数据结构和算法之美_10_递归
1、什么是递归?一种非常高效、简洁的编码技巧,一种应用非常广泛的算法,比如DFS深度优先搜索、前中后序二叉树遍历等都是使用递归。基本上,所有的递归问题都可以用递推公式来表示。2、为什么要用递归,它有哪些优缺点?优点:递归代码虽然简洁高效缺点:比如,堆栈溢出、重复计算、函数调用耗时多、空间复杂度高3、 如何写出递归代码...原创 2020-12-10 21:36:23 · 50 阅读 · 0 评论 -
数据结构和算法之美_09_队列
队列(queue)来历特点先进者先出,这就是典型的“队列”PS:无论顺序队列还是链式队列,队首指针指向队列中第一个元素,队尾指针指向队列的最后一个元素的下一个位置。入队时,现将元素入队,再将队尾指针后移一位。适合解决的问题实际的应用场景作为一种非常基础的数据结构,队列的应用也非常广泛,特别是一些具有某些额外特性的队列,比如循环队列、阻塞队列、并发队列。它们在很多偏底层系统、框架、中间件的开发中,起着关键性的作用。比如高性能队列 Disruptor、Linux 环形缓存,都用到了循环并发队列。原创 2020-12-10 21:12:44 · 132 阅读 · 0 评论 -
数据结构和算法之美_08_栈
栈来历事实上栈是一种“操作受限”的线性表,只允许在数据的一端插入和删除。但是,我们需要理解的是特定的数据结构适用于特定的应用场景,数组和链表暴露了太多借口,操作起来容易出错,因此需要栈。特点先进后出,后进先出。适合解决的问题当某个数据集合只涉及在一端的插入和删除操作,且满足后进先出,先进后出的特性,我们就应该首先考虑选用“栈”这种数据结构。实际的应用场景浏览器的前进后退功能问题描述:当你依次访问完一串页面 a-b-c 之后,点击浏览器的后退按钮,就可以查看之前浏览过的页面 b 和 a。当你原创 2020-12-10 21:09:03 · 121 阅读 · 1 评论 -
C++:构造函数后面的冒号
阅读以下代码的过程中有一行代码看不懂:struct TreeNode{int val;TreeNode};原创 2020-09-26 19:58:21 · 235 阅读 · 0 评论