
C/C++相关
CavalryOuO
up
展开
-
多态
多态性可以简单概括为“一个接口,多种行为”。 也就是说,向不同的对象发送同一个消息, 不同的对象在接收时会产生不同的行为(即方法)。也就是说,每个对象可以用自己的方式去响应共同的消息。所谓消息,就是调用函数,不同的行为就是指不同的实现,即执行不同的函数。这是一种泛型技术,即用相同的代码实现不同的动作。这体现了面向对象编程的优越性。 多态分为两种:转载 2017-05-29 21:58:20 · 222 阅读 · 0 评论 -
C/C++中scanf和cin的读取回车、空格等分隔符
输入流cin无论什么情况下都会忽略tab、空格、回车等分隔符,包括但不限于cin>>int,cin>>char,cin>>string等情况。scanf函数在除scanf("%c",&char)之外的所有情况都不会把回车符作为输入字符在输入缓存中读取,但scanf("%c",&char)也不会读取tab、空格,而是把他们作为分隔符在输入缓存中...原创 2018-04-10 22:45:45 · 15312 阅读 · 3 评论 -
C++map和vector在没赋值情况下的默认值
map和vector都可以用operator[]进行访问,map是用[]中的数据作为key进行查询,而vector是用[]中的数作为下标进行访问。如果在用operator[]进行访问的时候出现了越界情况,即map没有这个键值对,或vector的大小小于下标数值,会发生什么情况?struct node{int a{5};};int main() { map<string,no...原创 2018-04-11 23:40:40 · 10656 阅读 · 2 评论 -
Hash时取模为什么要模质数
首先来说假如关键字是随机分布的,那么无所谓一定要模质数。但在实际中往往关键字有某种规律,例如大量的等差数列,那么公差和模数不互质的时候发生碰撞的概率会变大,而用质数就可以很大程度上回避这个问题。 考虑模是合数的情况:假设N = kn, M = km, N和M存在最大公因数k,此时可以将N % M = r转化为公式N = Mq + r,即kn = kmq + r。其中q是商,r是余数。“表...原创 2018-04-22 00:23:05 · 3751 阅读 · 1 评论 -
希尔排序的时间复杂度为什么能小于O(n^2)
可以用逆序数来理解,假设我们要从小到大排序,一个数组中取两个元素如果前面比后面大,则为一个逆序,容易看出排序的本质就是消除逆序数,可以证明对于随机数组,逆序数是O(N^2)的,而如果采用“交换相邻元素”的办法来消除逆序,每次正好只消除一个,因此必须执行O(N^2)的交换次数,这就是为什么冒泡、插入等算法只能到平方级别的原因,反过来,基于交换元素的排序要想突破这个下界,必须执行一些比较,交换相隔比较...转载 2018-04-20 20:41:28 · 2262 阅读 · 0 评论 -
堆排序的时间复杂度分析
堆排序包括两个阶段,初始化建堆和重建堆。所以堆排序的时间复杂度由这两方面组成,下面分别进行分析。先post一个实现代码,便于分析。#include <stdio.h>void swap(int *a, int *b);void adjustHeap(int param1,int j, int inNums[]);void HeapSort(int nums, int in...原创 2018-04-21 01:27:18 · 74844 阅读 · 8 评论 -
c++ string与int(其他的内部类型)转换
一、int转string1.如果你用的编译器是基于最新的C++11标准,那么string和其他类型转换问题就变的很简单,因为中已经封装好了对应的转换方法:标准库中定义了to_string(val);可以将其它类型转换为string。string to_string (int val);string to_string (long val);string to_string (lon...原创 2018-04-30 00:18:04 · 299 阅读 · 0 评论 -
让DevC++支持ISOC++11标准
工具->编译选项 语言标准 设置ISO C++ 11原文:https://blog.youkuaiyun.com/qiqi123i/article/details/53150837转载 2018-07-12 22:38:15 · 2571 阅读 · 1 评论 -
递归算法求n个不同字符的所有全排序列
设str是含有n个不同字符的数组例如12345,perm(str,k,n)为str[0]~str[k]的所有字符全排序输出函数,n为str数组字符个数。以此类推,perm(str,k-1,n)处理的字符个数比perm(str,k,n)处理的字符个数少一个。假定perm(str,k-1,n)可求,对于第k个位置可以任取str[0]~str[k-1]内任意元素作为str[k],再组合perm(st...原创 2018-08-13 16:46:05 · 4703 阅读 · 1 评论 -
vector<vector<int>>作为二维数组
vector本来就是可以用来代替一维数组的,vector提供了operator[]函数,可以像数组一样的操作,而且还有边界检查,动态改变大小。 这里只介绍用它来代替二维的数组,二维以上的可以依此类推。1、定义二维vectorvector<vector<int> > v;//注意>和>之间的空格。2、访问二维vector的元素的三种方式...原创 2018-04-10 20:22:59 · 13885 阅读 · 1 评论 -
C/C++中sort函数排序方法的选择
STL的sort函数在数据量大时采用快排,分段递归排序,一旦分段后的数据小于某个值,就改用插入排序。如果递归层次过深,还会改用堆排序。这样就结合了各类算法的所有优点。 另外sort函数的排序区间是[a,b),所以如果对数组t的第0到len-1的元素排序,就写sort(t,t+len);对向量v排序也差不多,sort(v.begin(),v.end())。...原创 2018-03-31 08:38:26 · 652 阅读 · 0 评论 -
C++各种指针解析
#include<iostream>using namespace std;void func(int iArray[][5]) { } int main() { int a[5][5]={};//一个二维数组//------------ int (*b)[5];//b是一个指向一个大小为5的一维int数组的指针,也称为行指针 b=a;/...原创 2018-03-14 17:25:25 · 169 阅读 · 0 评论 -
使用new创建数组
class A1. A* pa = new A[3] ;2. pa[0] = A();3. pa[1] = A();4. pa[2] = A(); 5. delete []pa;注意此时数组元素是类对象或1.A* pa[3];2.pa[0]=new A();...注意此时数组元素是类对象指针,指针数组的首地址相当于指针的指针转载 2017-05-29 21:58:59 · 4112 阅读 · 0 评论 -
创建类的两种方式
一种是在栈上创建,形式如下:CSomeClass someObject;一种是在堆上创建(动态分配)(返回指针)形式如下:CSomeClass *pSomeObject = new CSomeClass();转载 2017-05-29 22:03:18 · 291 阅读 · 0 评论 -
关于int类型取值范围的计算以及为何16位int类型范围是- 32768 ~ 32767
首先计算机是以补码形式储存数据的:补码的原因就是计算机可以把减法当加法算.1.对于有符号的整数,用补码表示的话,比如说8位(即char,BYTE类型的),最高位是符号位,下面7位用来表示数据. 那么,表示正数的话,表示的范围为00000001-01111111,也就是说,8位表示正数,最高只能是127,最高是符号位嘛,是不能用的. 表示0:00000000 下面表示负数,相信你应该知道表示的方转载 2018-02-18 10:19:29 · 2074 阅读 · 0 评论 -
C++中定义类的对象:用new和不用new有何区别?
我们都知道C++中有三种创建对象的方法,如下: 复制代码 代码如下:#include <iostream>using namespace std;class A{private: int n;public: A(int m):n(m) { } ~A(){}};int main(){ A a(1); //栈中分配 A b =转载 2018-03-11 12:22:20 · 4942 阅读 · 0 评论 -
参数传递二维数组及动态申请二维数组
参数传递二维数组数组名作为实参void func1(int iArray[][10]) { } int main() { int array[10][10]; func1(array); }一维数组指针(也称行指针)作为形参void func2(int (*pArray)[10]) { } void func2_1(int (*pArray)[]原创 2018-03-12 13:13:28 · 201 阅读 · 0 评论 -
C++中结构体与类的区别(struct与class的区别)
转载来源:https://www.cnblogs.com/starfire86/p/5367740.htmlC++中的struct对C中的struct进行了扩充,它已经不再只是一个包含不同数据类型的数据结构了,它已经获取了太多的功能。struct能包含成员函数吗? 能!struct能继承吗? 能!!struct能实现多态吗? 能!!! 既然这些它都能实现,那它和cl转载 2018-03-14 08:35:34 · 161 阅读 · 0 评论 -
标准输入cin的返回值以及while(cin>>x)的问题
原文 :https://www.cnblogs.com/gysm/archive/2011/08/03/2126511.html 看到cin的时候,我们经常看到很多的代码中会有这么一段while(cin>>x){ ……}。这里我们最关注的问题是while括号里面cin>>x他每次输入的时候返回的是什么值呢。所以我们也就会问cin的返回值是什么。我也看到很多像我这样的新手问这样的问题,下面说下我个人转载 2018-03-23 23:47:18 · 3260 阅读 · 3 评论 -
C++ new A 和 new A() 的区别详解以及引申的各种初始化类型
原文链接:http://blog.youkuaiyun.com/xiajun07061225/article/details/8796257 https://www.zhihu.com/question/36735960?from=profile_question_card 我们在C++程序中经常看到两种new的使用方式:new A以及new A()。 那么这两种究竟有什么区别呢?转载 2018-03-14 17:02:08 · 4642 阅读 · 2 评论 -
使用递归求平均值
如果数组长度为1,则可以直接返回平均值结果;否则将数组A视为两部分,即A[n-1]和A[0,…,n-2],递归地处理A[0,…,n-2]中n-1个数的平均值avg,通过(avg*(n-1)+A[n-1])/n即可求得数组A中所有数的平均值。float arrayavg(float A[],int n){ if(n==0) return A[n]; else...原创 2018-08-13 17:15:43 · 12667 阅读 · 5 评论