自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(39)
  • 资源 (1)
  • 收藏
  • 关注

原创 4. 最大子列和问题

问题输出最大子列和。如果序列中所有整数皆为负数,则输出0。(没这个要求也可以做,本文针对这种情况)算法1最容易想到,也是最笨的方法,把所以子列和都算出来,找到最大的。/* 方法一:所有子列和都算出来,保留最大值 */int maxSubSeqSum1(int a[], int n){ int sum = 0; int max = 0; for (int i = 0; i < n; i++) /* i是子列左端

2022-04-28 23:28:53 256

原创 3. 什么是数据结构?什么是算法

数据结构数据对象在计算机中的组织方式逻辑结构物理存储结构数据对象必定与一系列加在其上的操作相关联完成这些操作所用的方法就是算法数据类型:数据对象集数据集合相关联的操作集抽象:与存放数据的机器无关与数据存储的物理结构无关与实现操作的算法和编程语言均无关只描述数据对象集和相关操作集“是什么”,并不涉及“如何做到”的问题。算法一个有限指令集接受一些输入(有些情况不需要输入)产生输出一定要在有限步骤之后终止每一条指令必须有充分的的目标,不可以有歧义计算机能处理的范围内

2022-04-27 22:26:19 810

原创 2. 你会求多项式吗

问题如何编程求这个多项式?code很简单,我+再+再+不就出来了。#include <stdio.h>#include <stdbool.h>#include <math.h>#include <time.h>#define MAXK 10000000 //被测函数最大调用次数#define MAXN 101 //多项式的最大项数,即阶数 + 1clock_t start, stop; // clock_t是clock()函数返回的变

2022-04-27 22:07:04 202

原创 1. 导入-递归与循环

问题引入写程序实现一个函数使得传入一个正整数为N的参数后,能顺序打印1到N的全部正整数。实现#include <stdio.h>void PintN1(int N){ for (int i = 1; i < N; i++) { printf("%d\n", i); } return;}void PintN2(int N){ if(N) { PintN2(N - 1); pri

2022-04-27 20:40:03 215

原创 QT学习之入门

1 QT简介1.1 跨平台图形界面引擎1.2 历史1.3 优点 跨平台 接口简单,容易上手 一定程度上简化了内存回收1.4 版本 商业版 开源版1.5 成功案例 linux桌面环境 KDE 谷歌地图 VLC多媒体播放器2 创建第一个Qt程序点击创建项目后,选择项目路径以及给项目起名称。名称 - 不能有中文,不能有空格。路径 - 不能有中文路径。默认创建有窗口类,Mywidget,基类有三种选择:QWidget、QMa

2021-12-13 23:09:13 1024

原创 STL-算法

#include <iostream>#include <algorithm>#include <numeric>#include <vector>using namespace std;class MyPrint{public: void operator()(const int &val) { cout << val << " "; }};void test01

2021-03-06 21:16:51 61

原创 STL-函数对象、仿函数

#include <iostream>#include <vector>#include <algorithm>using namespace std;class MyAdd{public: MyAdd() { count = 0; } int operator()(int v1, int v2) { ++count; return v1 + v2; }

2021-03-04 10:07:02 122 1

原创 STL-map/multimap

#include <iostream>#include <map>#include <algorithm>using namespace std;void printMap(const map<int, int> &m){ for (map<int, int>::const_iterator it = m.begin(); it != m.end(); ++it) cout << "key

2021-03-03 22:03:37 78 1

原创 STL-set/multiset

#include <iostream>#include <set>using namespace std;template<class T>void printSet(const set<T> &s){ for (const T &value : s) { cout << value << " "; } cout << endl;}void

2021-03-01 22:59:35 68

原创 STL-list

#include <iostream>#include <list>using namespace std;template <class T>void printList(const list<T> &l){ for (const T &value : l) { cout << value << " "; } cout << endl;}v

2021-03-01 21:39:25 45

原创 STL-queue

#include <iostream>#include <queue>#include <string>using namespace std;class Person{public: Person(string name, int age) { m_Name = name; m_Age = age; } string m_Name; int m_Age;};void test

2021-03-01 19:24:12 65

原创 STL-stack

#include <iostream>#include <stack>using namespace std;void test01(){ stack<int> s; s.push(10); s.push(20); s.push(30); cout << "s的大小:" << s.size() << endl; while (!s.empty()) {

2021-03-01 19:04:50 60

原创 STL-deque

#include <iostream>#include <deque>using namespace std;template<class T>void printDeque(const deque<T> &d){ for (const T &value : d) cout << value << " "; cout << endl;}void test01

2021-03-01 19:02:25 40

原创 STL-vector

#

2021-03-01 18:55:53 64

原创 STL-string

#

2021-03-01 18:55:14 73

原创 Linux多线程编程

线程的概念:轻量级的进程,一个进程内部可以有多个线程,默认情况下一个进程只有一个线程。线程是最小的执行单位,进程是最小的系统资源分配单位。内核实现都是通过clone函数实现的。线程也有自己的PCB。线程非共享资源:线程id处理器现场和栈指针(内核栈)独立的栈空间(用户空间栈)errno变量信号屏蔽字调度优先级线程的优点:提高并发性占用资源小通信方便线程的缺点:调试困难库函数,不稳定对信号支持不好缺点可以克服,优点很突出。线程的操作函数int pthread_crea

2021-02-07 22:50:56 121

原创 守护进程

会话:进程组的更高一级,多个进程组对应一个会话。进程组:多个进程在同一个组,第一个进程默认是进程组的组长。创建会话的时候,组长不可以创建,必须是组员创建。创建会话的步骤:创建子进程,父进程退出,子进程自当会长。守护进程的步骤(红色必须步骤):1.创建子进程fork2.父进程退出3.子进程当会长setid4.切换工作目录$HOME5.设置掩码 umask6.关闭文件描述符0,1,2,为了避免浪费资源7.执行核心逻辑8.退出#include <stdio.h>#inclu

2021-02-07 22:47:58 57

原创 进程间通信--信号

特点:简单,不能带大量的信息,满足特定条件发生。机制:进程B发送给进程A,内核产生信号,内核处理。产生:1.按键产生:ctrl+c ctrl+z ctrl+2.调用函数:kill raise abort3.定时器:alarm setitimer4.命令产生:kill5.硬件异常:段错误,浮点型错误,总线错误,SIGPIPE状态:1.产生2.递达 信号到达并且处理完3.未决 信号被阻塞了默认处理方式:1.忽略2.执行默认动作3.捕获4要素:1.编号2.事件3.名称4.默

2021-02-07 22:47:04 134

原创 进程间通信--mmap

//mmap.c#include <stdlib.h>#include <stdio.h>#include <unistd.h>#include <sys/types.h>#include <sys/stat.h>#include <sys/mman.h>#include <fcntl.h>#include <string.h>int main(int argc, char const *a

2021-02-07 22:39:49 349

原创 进程间通信--管道

pipe管道实现原理: 内核借助环形队列机制,使用内核缓冲区实现。特点: 1. 伪文件;2. 管道中的数据只能一次读取;3. 数据在管道中,只能单向流动。局限性:1. 自己写,不能自己读;2. 数据不可以反复读;3. 半双工通信;4. 血缘关系进程间可用。#include <stdio.h>#include <unistd.h>#include <sys/types.h>#include <sys/wait.h>int main(int ar

2021-02-07 22:35:39 119

原创 Linux多进程编程

fork函数pid_t fork(void)创建子进程。父子进程各自返回。父进程返回子进程pid。 子进程返回 0。#include <stdio.h>#include <unistd.h>#include <stdlib.h>int main(){ printf("Begin... "); pid_t pid = fork(); if (pid < 0) { perror("fork err");

2021-02-07 21:52:42 76

原创 从深拷贝、浅拷贝到引用计数和循环引用,再到强指针和弱指针的实现和分析

深拷贝和浅拷贝对内存资源使用的讨论,必然要先从深拷贝浅拷贝说起。深拷贝的优点:每一个的对象(哪怕是通过拷贝构造函数实例化的对象)的指针都有指向的内存空间,而不是共享,所以在对象析构的时候就不存在重复释放或内存泄露的问题了。深拷贝的缺点:内存开销大。浅拷贝优点:通过拷贝构造函数实例化的对象的指针数据变量指向的共享的内存空间,因此内存开销较小。浅拷贝缺点:对象析构的时候就可能会重复释放或造成内存泄露。鉴于深拷贝和浅拷贝的优缺点,可采用引用计数技术,既减小了内存开销,又避免了堆的重复释放或内存泄露问题

2021-02-02 21:14:47 156

原创 C++11 & 14 & 17新特性及使用方法

nullptr:用来替代NULL,区别空指针、0。nullptr的类型为nullptr_t。constptr:显式的生命函数或对象构造函数在编译器会成为常量表达式。iterator:迭代器,为容器提供统一的遍历方式。 auto:自动类型推导。委托构造:Base(int i) : Base,同一个类中一个构造函数调用另一个构造函数(仅能委托一个)。继承构造:using Base::Base; 派生类委托使用基类的构造函数。override:显示声明派生类重写基类的虚函数。final:final声明

2021-01-31 20:29:41 465

原创 静态库、动态库制作和使用步骤

静态库制作1.编译源代码生成.o文件gcc -c src/add.c -o output/add.ogcc -c src/add.c -o output/sub.o2.制作静态库ar rcs lib/libmymath.a output/add.o output/sub.o3.使用静态库编译可执行程序gcc src/test.c lib/libmymath.a -I include/ -o a.out 动态库制作1.生成位置无关的.o文件gcc -c src/add.c -o ou

2021-01-26 15:36:09 103

原创 Makefile小结

预处理:gcc -E hello.c -o hello.i    1.展开宏定义(#define)    2.处理所有条件预编译指令(#if、#ifdef、#else、#else if、#endif)    3.处理#include预编译指令,将被包含的文件插入到该项预编译指令当中(递归执行)    4.删除所有的注释    5.保留所有#progrma编译器指令,因为编译器需要使用它们编译:编译过程就是把预处理完的文件进行一系列词法分析、语法分析、语义分析及优化后生成相应的汇编代码文件。  

2020-12-16 17:16:23 176 1

原创 ffmpeg api判断输入流是什么编码格式(H264?HEVC?)

#include <libavformat/avformat.h>#include <libavcodec/avcodec.h>#include <libswscale/swscale.h>#include <libavutil/mathematics.h>#include <libavutil/time.h>#include <libavutil/opt.h>int is_h264_file(char *filename

2020-11-23 19:40:40 677

原创 无重复字符的最长子串

无重复字符的最长子串给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。示例 1:输入: “abcabcbb”输出: 3解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。示例 2:输入: “bbbbb”输出: 1解释: 因为无重复字符的最长子串是 “b”,所以其长度为 1。示例 3:输入: “pwwkew”输出: 3解释: 因为无重复字符的最长子串是 “wke”,所以其长度为 3。请注意,你的答案必须是 子串 的长度,“pwke” 是一个子序列,不是子

2020-09-15 15:02:24 107

原创 迷宫算法-数据结构、算法与应用C++语言描述

一、栈的算法查找迷宫解法1.代码按照《数据结构、算法与应用C++语言描述》第九章栈的思路来实现解法。迷宫内部主要有四个函数。welcome函数是欢迎界面,inputMaze函数是输入迷宫,findPath是寻找迷宫解法,outputPath是输出迷宫解法。#include <iostream>#include "Maze.h"using namespace std;...

2020-04-15 19:28:11 563

原创 字符串相加

分析给定两个字符串形式的非负整数 num1 和num2 ,计算它们的和。代码先将字符串对齐,然后从末位开始相加,注意首位进1的情况。 string addStrings(string num1, string num2) { int s1 = num1.size(); int s2 = num2.size(); //将num1和num2...

2020-03-31 22:17:42 251

原创 字符串中的第一个唯一字符(查找字符串中第一个不重复的字符)

分析利用数组或者map容器建立一个映射关系,数组内存放每个字符的个数,然后依顺序查找第一个个数为1的字符。代码返回第一个唯一字符位置同理。char firstUniqChar(string s) { //int hash[52] = { 0 }; //字符串含有大写字母 int hash[26] = { 0 }; //字符串只有小写字母 ...

2020-03-31 22:15:11 551

原创 赎金信

分析给定一个赎金信 (ransom) 字符串和一个杂志(magazine)字符串,判断第一个字符串ransom能不能由第二个字符串magazines里面的字符构成。如果可以构成,返回 true ;否则返回 false。(题目说明:为了不暴露赎金信字迹,要从杂志上搜索各个需要的字母,组成单词来表达意思。)代码第一种 bool canConstruct(string ransomNot...

2020-03-27 21:29:46 122

原创 反转字符串中的元音字母

分析编写一个函数,以字符串作为输入,反转该字符串中的元音字母。代码前后一起查找,找到元音字母就交换。 bool isVowel(char c) { if (c == 'a' || c == 'e' || c == 'i' || c == 'o' || c == 'u' || c == 'A' || c == 'E' || c == 'I' || c == 'O...

2020-03-27 20:46:07 256

原创 判断回文串

分析回文串,从前往后读和从后往前读是一样的,例如“abcba”。本文只考虑字母和数字字符,忽略字母的大小写,将空字符串定义为有效的回文串。代码一开始我的思路是将字符串遍历,去除空格等只留下字符和数字,然后利用reverse函数判断。这种方法不管是不是回文串都要把字符串遍历一遍,耗时太久。 bool isPalindrome(string s) { stri...

2020-03-27 20:41:02 907

原创 两个二进制数字求和

分析给定两个二进制字符串,返回他们的和(用二进制表示)。第一反应是先把二进制字符串转化为十进制,然后计算他们的和,再把他们的和转为二进制。 //二进制转十进制 int BinaryToDecimal(string s) { int num = 0; for (int i = 0; i < s.size(); ++i) {...

2020-03-27 00:39:57 2163

原创 返回一句话的最后一个单词

分析返回一句话的最后一个单词:例如“What is your name”,最后一个单词就是"name"。代码一整句话是一个字符串,以“ ”空格作为分隔符,利用rfind函数从后往前查找。但是要注意字符串最后是空格的情况(“Who are you ”)。我们先看下如何返回最后一个单词个数。 int lengthOfLastWord(string s) { int o...

2020-03-27 00:24:07 285

原创 外观数列

「外观数列」是一个整数序列,从数字 1 开始,序列中的每一项都是对前一项的描述。前五项如下:1. 12. 113. 214. 12115. 111221第一行的读音为1个1,所以多2行就是11;第二行的读音为2个1,所以第3行就是21;第三行的读音是1个2、1个1,所以第4行就是1211;第四行的读音是1个1、1个2、2个1,所以第5行就...

2020-03-26 22:17:13 595

原创 有效的括号(判断括号使用正确性)

如何判断括号使用正确?以 {[()][]} 为例,我们从内向外分析。() 是成对使用的,我们取出后为 {[][]} ,然后依次为 {[]} 、 {} ,可以判断是有效的括号,即括号使用正确。代码逻辑左括号进栈,右括号判断是否与栈顶元素成对使用。 bool isValid(string s) { if (s.size() % 2 != 0) re...

2020-03-26 22:04:46 1405

原创 查找字符串数组(多个字符串)的最长公共前缀

代码逻辑首先对字符串容器做排序处理,然后取出首尾两个字符串的最长公共前缀 //查找两个字符串的最长公共前缀 string CommonTwoStr(const string& str1, const string& str2) { string tmp = ""; int i = 0; int minSize = min...

2020-03-26 21:46:29 1590

原创 罗马数字转整数

代码逻辑getCharValue()函数相当于创建一个映射关系,也可以用用容器代替。用lastNum 记录前一位罗马数字与当前罗马数字比较,并进行更新。int getCharValue(const char& c) { switch (c) { case 'I': return 1; case '...

2020-03-26 21:41:34 63

c++11,14,17.zip

c++11,14,17.zip

2021-02-02

空空如也

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

TA关注的人

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