自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(16)
  • 收藏
  • 关注

原创 C++ 字符串和整数型之间的转换

to_string可以将整数型、浮点型转换为字符串类型#include <iostream>#include <string>using namespace std;int main(){ int a = 4; double b = 3.0; string str1, str2; str1 = to_string(a); str2 = to_string(b); cout << str1 << endl; cout <<

2020-07-12 14:51:44 554

转载 C++中的string常用函数用法

标准c++中string类函数介绍注意不是CString之所以抛弃char*的字符串而选用C++标准程序库中的string类,是因为他和前者比较起来,不必 担心内存是否足够、字符串长度等等,而且作为一个类出现,他集成的操作函数足以完成我们大多数情况下(甚至是100%)的需要。我们可以用 = 进行赋值操作,== 进行比较,+ 做串联(是不是很简单?)。我们尽可以把它看成是C++的基本数据类型。好了,进入正题………首先,为了在我们的程序中使用string类型,我们必须包含头文件 。如下:#includ

2020-07-12 14:18:56 447

原创 在C++中遍历字符串(容器类)的三种方式

把字符串“1234”转换为整形1234,为例来说明遍历字符串的三种方式:1.常规方式(下标+operator[]),类似数组方式#include <iostream>#include <string>using namespace std; int StrToInt1(string str){ int value = 0; for (size_t i = 0; i < str.size(); i++) { value *=

2020-07-12 14:00:48 1353

原创 C++ sort函数实例讲解

sort函数主要用于排序,在使用时需要#include <algorithm>。使用方法如下:void sort (RandomAccessIterator first, RandomAccessIterator last, Compare comp);其中第一个参数为排序数组起始地址,第二个参数为结束地址,第三个参数comp表示排序方法,不写默认从小到大。举例#include<iostream>#include<algorithm>using namespa

2020-07-10 22:26:48 433

原创 C++ set容器使用方法

set是STL中一种标准关联容器。它底层使用平衡的搜索树——红黑树实现,插入删除操作时仅仅需要指针操作节点即可完成,不涉及到内存移动和拷贝,所以效率比较高。在set中,每个元素都是唯一的,如果想要允许重复元素,可以使用multiset。1.set的常用操作使用时注意包含头文件<set> std::set and std::multiset associative containerss.begin()  返回set容器的第一个元素s.end()      返回set容器

2020-07-09 21:29:31 1328

原创 C++中toupper、tolower 、isalpha、isalnum、isdigit、islower、isupper、isblank、isspace的用法

toupper()int toupper(int)接收和返回的都是该字符的ASCII码,用的时候直接输入字符就可以,C++内部会自动转换将一个字符转换为大写char c = 'c';char tmp = tolower(c);//将小写字母c转为大写,返回大写c的ASCII码,由于char类型变量接收,内部自动完成转换cout << tmp;//输出大写C2.tolower()int tolower(int)接收和返回的都是该字符的ASCII码,用的时候直接输入字符就可以.

2020-07-08 14:30:17 959

原创 AVL树的C++实现(2)

之前介绍了如何添加的元素位于不平衡节点左侧的左侧及右侧的右侧时如何处理,那么这篇首先介绍如何解决添加元素位于不平衡节点左侧的右侧及右侧的左侧该怎么处理。LR插入节点z位于x的右侧,此时问题比之前复杂一点,一次旋转并不能解决问题。因为T1<x<T2<z<T3<y<T4T1<x<T2<z<T3<y<T4T1<x<T2<z<T3<y<T4,将x先进行左旋转。此时的情况就和之前右旋转的情况一致,只需要对y

2020-07-05 11:57:34 137

原创 AVL树的C++实现(1)

为什么要AVL在之前的介绍的二分搜索树中,我们发现它查找、添加、删除元素的复杂度为O(logn)O(logn)O(logn)级别,但是在某些特殊情况下,比如在添加1,2,3,4,5,6时,你期望能够添加完成为左边的树,但是如果按顺序添加就会退化成链表,复杂度变为O(n)O(n)O(n)级别。此时这种二叉树就成为一种不平衡二叉树,而AVL树就是解决这种不平衡二叉树一种方法。平衡二叉树从字面上理解就是这棵树要尽量的平衡。但是对于平衡有不同的定义,比如之前说的堆,它是一棵完全二叉树,空缺部分只能出现在右下

2020-06-30 15:37:03 230

原创 并查集及相关改进的C++实现

并查集是一种不一样的树形结构,它主要的作用是解决连接问题。比如判断下图中的两个节点是否相连,如果是相邻的两个点那么可以很快判断出来,但是对于相隔较远的点就需要使用并查集来判断了。在现实生活中我们主要使用连接问题判断网络之间的连接关系,这种网络包括计算机网络以及社交网络等等。实现在并查集中我们需要实现的功能主要就是实现两个元素合并为同一个集合下 union(p,q)union(p,q)union(p,q)查看某个元素属于哪一个集合 find(p)find(p)find(p)判读两个元素是否连接

2020-06-27 18:59:19 106

原创 二分搜索树的实现以及相关操作 C++实现

二分搜索树这种数据结构主要是用于查找功能的,在介绍二分搜索树之前先简单介绍下二分搜索,对于一个有序数组,首先找到中间元素v,如果等于那就太好了,如果比v小,那么就从小于v的部分继续查找,反之亦然。那么这个过程的时间复杂度就是O(logn)O(logn)O(logn)。二分搜索树主要是用于查找表的实现,也称为字典数据结构。就是每个数据有Key值和Value值,通过对Key值得搜索得到value值。如果使用数组实现查找表,首先可能存在key值非数字,无法排序的情况,其次如果查找表元素比较稀疏,使用数组可能并不

2020-06-17 16:31:47 332

原创 数据结构-堆和堆排序 C++实现

为什么使用堆堆的主要用途是在处理优先队列上,相比于普通队列的先进先出,后进后出,优先队列出队顺序和入队顺序无关,只和优先级有关。比如头等舱登机就比普通乘客先登机,而和先来后到没有关系。但是有人会说我把数组先进行排序再处理呗,但是现实生活中往往是需要进行动态处理的,如果每次有新元素都要进行重新排序,那处理起来是十分复杂的。此时使用堆的数据结构处理速度会有一定的提升。通过对比可以看出,虽然使用堆在入队和出队都不是最优,但是在同时出入队就会有较好的性价比。如何实现堆从上可以看出堆的时间复杂度为O(log

2020-06-15 16:29:19 416

原创 排序算法-快速排序(快排、双路快排、三路快排)(2)C++实现

双路快排看完快速排序后,有人肯定会有一丝丝疑惑,刚刚的快速排序好像并没有考虑元素=v=v=v的情况。其实对于=v=v=v的情况很简单,只要在之前的partition过程中将>>>改为>=>=>=或者<<<改为<=<=<=。但是如果这么简单,那也没有必要单独写了。问题就在如果一个数组重复数字比较多,那么partition操作后的两个数组就会出现之前的不均衡的情况。所以如果重复数字较多的话,快速排序就会退化至O(n2)O(n^2)O(n

2020-06-09 21:32:42 329

原创 排序算法-快速排序(快排、双路快排、三路快排)(1) C++实现

快速排序也是一种复杂度为O(nlogn)O(nlogn)O(nlogn)的排序算法,但它的效率比同等复杂的排序算法还要高,所以在实践中会经常使用。原理快速排序的思想是将数组分为两个部分,一部分小于vvv,另一部分大于vvv,这个vvv也称为基准数,一般选取数组第一个数作为基准数。它的实现效果是这样的,当分为两个数组后,每个单独的数组又可以使用该方法排序,直到只有最后一个元素,那这里又可以使用递归方法了。我们将数组分为两部分的过程称为partition。partition的实现思路如下:假设第一个元素

2020-06-08 16:49:54 617

原创 排序算法-归并排序及改进 C++实现

归并排序是一个复杂度为O(nlogn)的算法,一般出现复杂度有logn的情况,都是采用了一种类似树形结构的方法。原理归并排序将数据如下图不断二分,如果分开的部分已经排好序,那么只需要将这两个部分合并即可。但是如果分到最后一层,那么只有一个数据就是排好序的,将所有的数据网上归并即可。分完层之后就是对数据进行归并处理,这个问题看起来很简单,但是细细想来还挺复杂的。因为只对原数组进行操作并不能达到目的,此时需要另外开辟一个空间进行辅助操作。这也就是说插入排序需要额外使用O(n)的空间复杂度。开辟了额

2020-06-06 23:27:25 846

原创 排序算法-插入排序 C++实现

插入排序算法也是一个复杂度为O(n^2)的排序算法,它的原理跟打扑克类似。在打扑克时,每摸到一张牌我们都会把它插入到手上扑克中的正确位置。那么在排序中就是进行两重循环,第一重循环遍历数组,第二重循环将当前元素插入到之前元素中合适的位置。给一组图片演示加深理解对于第一个元素因为之前没有元素,不需要插入操作。对于第二个元素,跟前面的元素依次相比,6小于8,将6和8交换位置。下面也是同理,第三个元素依次与之前的元素比较,将其插入到合适位置。insertSelection(T arr[], int

2020-06-05 17:44:20 203

原创 排序算法-选择排序 C++实现

选择排序是排序算法中最为简单的一种,当然复杂度也是比较高的,为O(n^2)。但是最容易想到,所以先从选择排序开始。排序算法的思想主要是利用两重循环,第一重循环确定当前排序到达的位置,第二重循环寻找对应的元素。以从小到大排序为例,从第0个数据开始,向后寻找最小的元素,并将其位置指定为minIndex,与第0个数据交换即可。所以可以写出如下代码#include <iostream>#include <algorithm>using namespace std;void

2020-06-04 18:16:32 266

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除