自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(53)
  • 问答 (3)
  • 收藏
  • 关注

原创 c++ 小技巧(五)

16.静态成员变量和静态成员函数如果在类中使用static修饰一个静态成员变量,(不在栈上开,不在堆上开,而是在静态区) 静态成员变量初始化一定要写在类的外边 int AA::m_c =0;(和私有/共有没有关系) m_c 只是属于AA整个类,而不是属于a1,和a2 static void test() 说明这个函数只能在该文件中可见,其他文件调用这个函数不可以,多文件编程不可以,静态成员函数也是属于整个类的AA,而不是属于a1,和a2 静态成员函数怎么当左值; 只有普通成员变量才能占用内存空

2021-11-22 22:15:29 646

原创 c++ 小技巧(四)

1.一般变量在main中才能开辟内存空间,2. 手动创建构造函数和默认的构造函数构造函数种类:无参构造,有参构造,拷贝构造 默认构造函数:无参默认构造,拷贝默认构造,默认等号操作符,析构默认3.析构函数肯定没有形参,析构函数不能重载4.拷贝构造函数,5.什么是赋值,什么是拷贝构造函数要弄清楚6.构造函数需要的时候就写,不需要的时候可以不写7.当没有任何现实的构造函数(显示的无参,显示的有参,显示的拷贝构造)的时候,默认无参构造函数就会出现8.当没有出现"显示的拷贝函数“,默认的拷贝构.

2021-11-22 22:13:33 1063

原创 c++ 进阶 (四)template <class identifier>

函数模板template <class identifier> function_declaration;template <typename identifier> function_declaration;//method.cpp文件template<typename T> T sum_1(T& a, T& b){ return a + b;}//method.h文件#ifndef _method_#def

2021-11-19 13:06:30 816

原创 c++ 小技巧 (三) 多文件处理

多文件编程

2021-11-19 10:38:40 982

原创 c++ 小技巧 (五) typedef 定义函数指针以及实例

#include<iostream>#include<algorithm>#include<string.h>#include<string>#include<numeric>#include<iomanip>#include<math.h>#include<bitset>

2021-11-17 21:50:55 833

原创 c++ 小技巧 (四) 指针练习题

问题描述:给定一组整数,要求利用数组把这组数保存起来,再利用指针实现对数组中的数循环移动。假定共有n个整数,则要使前面各数顺序向后移m个位置,并使最后m各数变为最前面的m各数。输入样例:11 415 3 76 67 84 87 13 67 45 34 45输出样例:67 45 34 45 15 3 76 67 84 87 13#include<iostream>#include<algorithm>#include<string.h&g..

2021-11-16 13:22:20 725

原创 c++ 小技巧 (三) 指针基础

经典用法1. 一个函数通过指针做到返回两个值#include<iostream>#include<string>#include<string.h>#include<iomanip>#include<math.h>#include<vector>#include<stack>#include<algorithm>#include<bitset>#include<num

2021-11-15 20:49:47 500

原创 c++ 顺序表

总结归纳动态分配对内存有着更大的控制权,但也会花费相应的时间。 顺序表的查找时间复杂度为O(1),这是单链表所不具备的。 顺序表的插入,要从后往前遍历,因为数据要后移;顺序表的删除,要从前往后遍历,因为数据要前移。具体操作#include<iostream>#include<algorithm>#include<string.h>#include<string>#include<numeric>#include<io

2021-11-15 08:23:26 2109

原创 时间复杂度和空间复杂度

时间复杂度(只专注阶,不关心倍数和常量)常见的时间复杂度量级有:常数阶O(1) 对数阶O(logN) 线性阶O(n) 线性对数阶O(nlogN) 平方阶O(n²) 立方阶O(n³) K次方阶O(n^k) 指数阶(2^n)空间复杂度空间复杂度是对一个算法在运行过程中临时占用存储空间大小的一个量度,同样反映的是一个趋势,我们用 S(n) 来定义。通常复杂度指的是时间复杂度...

2021-11-13 21:00:47 632

原创 C++ 进阶理论(三) 数据抽象,数据封装,抽象类

数据抽象,数据抽象是指,只向外界提供关键信息,并隐藏其后台的实现细节,即只表现必要的信息而不呈现细节。(显示必要信息,多余都隐藏)它的内部实现和外部接口分离开了。举例:sort()函数访问标签强制抽象在 C++ 中,我们使用访问标签来定义类的抽象接口。一个类可以包含零个或多个访问标签:使用公共标签定义的成员都可以访问该程序的所有部分。一个类型的数据抽象视图是由它的公共成员来定义的。 使用私有标签定义的成员无法访问到使用类的代码。私有部分对使用类型的代码隐藏了实现细节。访问标签出现..

2021-11-13 20:48:03 345

原创 c++ 算法---桶排序 (bucket sort)

桶排序(Bucket sort)或所谓的箱排序,是一个排序算法,工作的原理是将数组分到有限数量的桶里。每个桶再个别排序(有可能再使用别的排序算法或是以递归方式继续使用桶排序进行排序)。桶排序以下列程序进行:设置一个定量的数组当作空桶子。 寻访序列,并且把项目一个一个放到对应的桶子去。 对每个不是空的桶子进行排序。 从不是空的桶子里把项目再放回原来的序列中​桶排序的重要应用1. 去重2.加速排序时间...

2021-11-13 20:26:56 1268

原创 C++ 的高精度乘法

(15条消息) C++ 的高精度乘法_努力中的老周的专栏-优快云博客

2021-11-12 10:02:56 1728

原创 C++ 进阶理论(二) 重载运算符和重载函数 ,多态

C++ 允许在同一作用域中的某个函数和运算符指定多个定义,分别称为函数重载和运算符重载。函数重载#include <iostream>using namespace std; class printData{ public: void print(int i) { cout << "整数为: " << i << endl; } void print(double f) {

2021-11-12 09:54:18 180

原创 C++ 进阶理论(一) 类定义,继承

class Box //定义类: 类里面包括方法{// public 确定了类成员的访问属性,也可以指定类的成员为 private 或 protectedpublic: //默认是private, double length; // 长度 double breadth; // 宽度 double height; // 高度 // 成员函数声明 double get(void) { return length * bre.

2021-11-12 09:06:52 616

原创 c++ <set> set()用法

关于set有下面几个问题:(1)为何map和set的插入删除效率比用其他序列容器高?大部分人说,很简单,因为对于关联容器来说,不需要做内存拷贝和内存移动。说对了,确实如此。set容器内所有元素都是以节点的方式来存储,其节点结构和链表差不多,指向父节点和子节点。结构图可能如下:(2)为何每次insert之后,以前保存的iterator不会失效?iterator这里就相当于指向节点的指针,内存没有变,指向内存的指针怎么会失效呢(当然被删除的那个元素本身已经失效了)。相对于vector来说,每一.

2021-11-11 12:20:43 202

原创 C++ 基础理论(四) 字符串,指针, 引用, 日期 & 时间, 输入输出

字符串指针每一个内存位置都定义了可使用连字号(&)运算符访问的地址,它表示了在内存中的一个地址。请看下面的实例,它将输出定义的变量地址用来声明指针的星号 * 与乘法中使用的星号是相同的。但是,在这个语句中,星号是用来指定一个变量是指针。以下是有效的指针声明引用引用 vs 指针引用很容易与指针混淆,它们之间有三个主要的不同:不存在空引用。引用必须连接到一块合法的内存。 一旦引用被初始化为一个对象,就不能被指向到另一个对象。指针可以在任何时候指向到另一个对象。 引用.

2021-11-11 07:38:54 801

原创 c++ <iomanip> setw()函数 setfill()函数

setw()默认填充的内容为空格,可以setfill()设置其他字符填充。#include <iomanip>using std::setw;cout<<'s'<<setw(8)<<'a'<<endl;输出s a意思是s后面输出8个字符,其中a占一个字符,剩余7个字符用空格填充setfill()#include <iostream>#include <iomanip>..

2021-11-10 12:01:23 910

原创 C++ 基础理论(三) 判断语句, 数字,

判断语句用if else就足够了? : 运算符 --了解一下就行

2021-11-10 10:05:27 427

原创 c++ 算法 归并排序 Merge Sort

归并排序 归并排序是建立在归并操作上的一种有效的排序算法。该算法是采用分治法的一个非常典型的应用,归并排序将两个已经有序的序列合并成一个有序的序列。思路:假设我们有一个没有排好序的序列,那么我们首先使用分割的方法将这个序列分割成一个个已经排好序的子序列(当一个序列只有一个元素时,该序列自然是有序的)。然后再利用归并的方法将一个个有序的子序列合并成排好序的序列。下面就一常用的二路归并排序讲解分割和合并的过程,看下图...

2021-10-10 14:07:01 817

原创 c++ 算法 插入排序 Insertion Sort

1. 算法描述插入排序的基本思想是每次将一个待排序的记录,按其关键字大小插入到前面已经排好序的子文件中的适当位置,直到全部记录插入完成为止。常见的插入排序有插入排序(Insertion Sort),希尔排序(Shell Sort),二叉查找树排序(Tree Sort),图书馆排序(Library Sort),Patience排序(Patience Sort)。下面介绍前两种:(一)直接插入排序最差时间复杂度:O(n^2)最优时间复杂度:O(n)平均时间复杂度:O(n^2)稳定性:稳定直

2021-10-09 22:39:04 379

原创 c++ 算法 快排 quick sort (模板快排)

快速排序的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。快速排序是一种不稳定的排序算法,也就是说,多个相同的值的相对位置也许会在算法结束时产生变动快速排序是C.R.A.Hoare于1962年提出的一种划分交换排序。它采用了一种分治的策略,通常称其为分治法(Divide-and-ConquerMethod)。该方法的基本思想是:1

2021-10-09 21:58:40 364

原创 c++ 算法 桶排序 bucket sort

1. 算法思想桶排序(Bucket sort)或所谓的箱排序,是一个排序算法,工作的原理是将数组分到有限数量的桶里。每个桶再个别排序(有可能再使用别的排序算法或是以递归方式继续使用桶排序进行排序)。2. 实现原理桶排序以下列程序进行:设置一个定量的数组当作空桶子。 寻访序列,并且把项目一个一个放到对应的桶子去。 对每个不是空的桶子进行排序。 从不是空的桶子里把项目再放回原来的序列中。(1)数据分桶(2)桶内数据排序(大部分是在分桶时,即插入时就排序了)(3)然..

2021-10-09 21:30:31 1673

原创 c++ heap (堆)

C++ STL中提供了不少和排序相关的算法,包括堆排序(heap_sort)、排序(sort)、稳定排序(stable_sort)、局部排序(partial_sort),时间复杂度均为O(nlogn)。其中,对于堆排序,也提供了不少函数,像入堆push_heap、创建堆make_heap、出堆pop_heap,是否为堆is_heap等。首先要明确数据结构上堆的概念。对于一个迭代器区间上的元素,不管实际的数据结构如何,都可以逻辑上排成一个完全二叉树,如果树的每个父节点都不小于左右两个子节点,那么区间元...

2021-10-09 11:26:23 4131

原创 c++ 算法 堆排序 heap sort

堆的定义 堆中某个节点的值总是不大于或不小于其父节点的值; 堆总是一棵完全二叉树。 堆的分类分大根堆和小根堆下面是小根堆,小根堆的定义是:任何一个子节点都不小于它的父节点。堆的根节点总是最小下面是大根堆。大根堆的定义是:任何一个子节点都不大于它的父节点。堆的根节点总是最大堆的存储与遍历。以小根堆为例子用数组存储就是:显然,堆的存储是按照每一层的顺序存进数组里的。那么,怎么找到一个堆的父亲与儿子?拿第二个点2举例。如图,第二个点2的父亲.

2021-10-09 10:48:02 280

原创 c++ 基础 字典序 (康托展开)

什么是字典序?普及一下,字典序是根据前后顺序逐位比较大小的顺序,如:123<132<213<231<312<321所以,字典序全排列就是只由1~n组成且每个只用一次的n个数构成的字典序排列。

2021-10-09 09:14:11 2610

原创 c++ <bitset> bitset函数

1. bitset 函数

2021-10-08 07:54:45 2965

原创 c++ <numeric> accumulate 函数

1.accumulate 函数accumulate定义在#include<numeric>中,作用有两个,一个是累加求和,另一个是自定义类型数据的处理int sum = accumulate(vec.begin() , vec.end() , 42);accumulate带有三个形参:头两个形参指定要累加的元素范围,第三个形参则是累加的初值。accumulate函数将它的一个内部变量设置为指定的初始值,然后在此初值上累加输入范围内所有元素的值。accumulate算法返回累加.

2021-10-08 07:49:15 697

原创 c++ <string> memset 函数 strcpy 函数 strcmp函数 strcat函数 strlen函数

1.memset 函数函数作用:在一段内存块中填充某一个给定的值,常用于较大的对结构体和数组的清零操作。代码#include<iostream>//#include"string.h"using namespace std;int main(){ char str[10]; str[9] = 'w'; memset(str,97,9); for(int i=0;i<10;i++){ cout<<str[i]&

2021-10-08 07:32:41 230

原创 c++ <vector> 删除元素的方法

删除 vector 容器元素的几种方式函数 功能 pop_back() 删除 vector 容器中最后一个元素,该容器的大小(size)会减 1,但容量(capacity)不会发生改变。 erase(pos) 删除 vector 容器中 pos 迭代器指定位置处的元素,并返回指向被删除元素下一个位置元素的迭代器。该容器的大小(size)会减 1,但容量(capacity)不会发生改变。 swap(beg)、pop_back() 先调用 swap() 函数交换要删除的目

2021-10-07 22:01:14 8860

原创 c++ <algorithm> next_permutation,prev_permutation函数

1. next_permutation和prev_permutation区别next_permutation(start,end):求的是当前排列的下一个排列prev_permutation(start,end):求的是当前排列的上一个排列。我们可以把它理解为序列的字典序的前后,abc这个序列有六个可能的排列组合:abc,acb,bac,bca,cab,cba。这些排列组合根据less-than操作符做字典顺序(lexicographical)的排序。也就是说,abc名列第一,因为每一个元素

2021-10-07 21:37:17 175

原创 c++ <algorithm> swap 函数 reverse 函数 remove 函数

1. swap()swap(a,b)2. reverse()reverse函数用于反转在[first,last)范围内的顺序,reverse函数没有返回值例子:交换vector容器中元素的顺序vector<int> v = {5,4,3,2,1};reverse(v.begin(),v.end());//v的值为1,2,3,4,5例子:还有string类的字符串string str="www.mathor.top";reverse(str.begin(),.

2021-10-07 21:21:21 675

原创 c++ <algorithm> max 函数 min函数,__gcd(x,y)函数

1. max()两个函数的取最大值max(a,b);多个数取最大值max({a,b,c,d,e});2. min() 同理3. min_element()min_element(first,end,cmp);其中cmp为可选择参数!1) 第三个参数cmp可写可不写, max_element() 和 min_element() 默认是从小到大排列,max_element() 输出最后一个值, min_element() 输出第一个值,但是如果自定义的 cmp 函数写的是从.

2021-10-07 21:12:28 4464

原创 c++ <algorithm> sort 函数 unique函数

//升序:sort(a,a+20,less<data-type>()); //降序:sort(a,a+20,greater<data-type>()) 1. Sort函数有三个参数:(1)第一个是要排序的数组的起始地址。(2)第二个是结束的地址(最后一位要排序的地址)(3)第三个参数是排序的方法,可以是从大到小也可是从小到大,还可以不写第三个参数,此时默认的排序方法是从小到大排序。sort(a,a+10);代码例子: 从小到大排序#inc..

2021-10-07 20:57:05 234

原创 C++ <cstdio> <algorithm> find 函数

1. find()查找第一次出现的目标字符串:如果查找成功则输出查找到的第一个位置,否则返回-1;#include<iostream>#include<cstdio>using namespace std;int main(){string s1 = "abcdef";string s2 = "de";int ans = s1.find(s2) ; //在S1中查找子串S2cout<<ans<<endl;system("pa.

2021-10-07 20:45:58 258

原创 c++ <math.h>round(), floor(),ceil(), fix()

1. round2. floor3. ceil,4. int abs(int i); 处理int类型的取绝对值5. double fabs(double i); //处理double类型的取绝对值6. float fabsf(float i); 处理float类型的取绝对值

2021-10-07 20:34:54 570

原创 c++ 算法 冒泡排序 bubble sort

冒泡排序(Bubble Sort)也是一种简单直观的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢"浮"到数列的顶端。1. 算法步骤比较相邻的元素。如果第一个比第二个大,就交换他们两个。对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。这步做完后,最后的元素会是最大的数。针对所有的元素重复以上的步骤,除了最后一个。

2021-10-07 07:25:56 432

原创 C++ 基础理论(二) --常量,修饰符类型, 存储类,运算符

C++运算符位运算符位运算符作用于位,并逐位执行操作。&、 | 和 ^ 的真值表如下所示:赋值运算符下表列出了 C++ 支持的赋值运算符:杂项运算符下表列出了 C++ 支持的其他一些重要的运算符。C++ 中的运算符优先级循环类型循环控制语句...

2021-10-06 21:19:46 147

原创 C++ 基础理论(一) typedef 声明, 枚举类型

C++ 是 C 的一个超集,事实上,任何合法的 C 程序都是合法的 C++ 程序。面向对象程序设计C++ 完全支持面向对象的程序设计,包括面向对象开发的四大特性:封装 抽象 继承 多态标准库标准的 C++ 由三个重要部分组成:核心语言,提供了所有构件块,包括变量、数据类型和常量,等等。 C++ 标准库,提供了大量的函数,用于操作文件、字符串等。 标准模板库(STL),提供了大量的方法,用于操作数据结构等C++基本语法C++ 程序可以定义为对象的集合,这些对象通过调用彼.

2021-10-04 20:43:19 306

原创 c++ 数组 动态数组,多维数组

1. 动态数组2. 多维数组

2021-10-03 12:05:13 102

原创 c++ 链表

1.单链表,2.循环链表3. 双链表

2021-10-03 12:02:42 5573

空空如也

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

TA关注的人

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