QT_project
1.首先需要先初始化一下,使用如下函数1av_register_all();
2.接着需要分配一个AVFormatContext,FFMPEG所有的操作都要通过这个AVFormatContext来进行1AVFormatContext *pFormatCtx = avformat_alloc_context();
3.接着调用打开视频文件12char *file_path = "E:in.mp4";avformat_open_input(&pFormatCtx, file_path, NULL, NULL);
4.文件打开成功后就是查找文件中的视频流123456789101112131415 ///循环查找视频中包含的流信息,直到找到视频类型的流 ///便将其记录下来 保存到videoStream变量中 ///这里我们现在只处理视频流 音频流先不管他 for (i = 0; i < pFormatCtx->nb_streams; i++) { if (pFormatCtx->st ...
面经
我们来逐个回答这些问题,便于你理解:
2. static 和 const
**static**:在C++中,static关键字可以有不同的含义:
在函数内部:用于声明静态变量,使其在函数调用结束后依旧保留状态。
在类中:用于声明类的静态成员变量或静态成员函数。静态成员属于类而非对象,所有对象共享。
在文件作用域:将函数或变量声明为静态可以限制其作用域,只在当前文件中可见。
**const**:const关键字用于定义常量或不可修改的变量。const修饰的变量必须在声明时初始化,且不可更改。常见的用法包括:
修饰指针,使指针内容不可更改或指针本身不可更改(const int* p与int* const p)。
修饰类成员函数,使其不可修改类成员数据,适用于只读访问。
3. 指针数组 和 数组指针
指针数组:即存储指针的数组,数组的每个元素都是指向某种数据类型的指针。例如,int* arr[10]是一个指针数组,包含10个指向int的指针。
数组指针:即指向数组的指针,指针指向一个数组的起始地址。例如,int (*p)[10]是一个数组指针,指向一个包含10个int元素的数组 ...
测试
什么是测试用例?
标题
测试环境
测试数据
测试步骤
期望结果
多表查询1234SELECT s.student_nameFROM students sJOIN courses c ON s.course_id = c.course_idWHERE c.course_name = '数学';
多表修改1234UPDATE studentsJOIN courses ON students.course_id = courses.course_idSET students.course_id = 2WHERE courses.course_name = '数学';
多表删除1234DELETE sFROM students sJOIN courses c ON s.course_id = c.course_idWHERE c.course_name = '数学';
冒烟测试主要作用是对新版本的软件进行快速初步验证,以确保系统的基本功能正常,适合进一步深入测试。代码评审是检查源代码是否达到模块设计的要求。
性能测试(Perf ...
Graph-Theory
邻接矩阵本质是二维数组来表示图结构邻接矩阵是从节点的角度来表示图,有多少节点就申请多大的二维数组
邻接表数组 + 链表的方式来表示邻接表是从边的数量来表示图,有多少边才会申请对应大小的链表
深度优先搜索深搜三部曲
确认递归函数,参数
确认终止条件
处理目前搜索节点出发的路径
所有可能的路径给你一个有 n 个节点的 有向无环图(DAG),请你找出所有从节点 0 到节点 n-1 的路径并输出(不要求按特定顺序)
graph[i] 是一个从节点 i 可以访问的所有节点的列表(即从节点 i 到节点 graph[i][j]存在一条有向边)。
输入:graph = [[1,2],[3],[3],[]]输出:[[0,1,3],[0,2,3]]解释:有两条路径 0 -> 1 -> 3 和 0 -> 2 -> 3
题目中暗含了邻接表的结构
12345678910111213141516171819202122class Solution {public: vector<int> path; vector<vect ...
二叉树
二叉树路径的问题大致可以分为两类:1、自顶向下:顾名思义,就是从某一个节点(不一定是根节点),从上向下寻找路径,到某一个节点(不一定是叶节点)结束
123456789101112131415161718192021222324252627282930一般路径:vector<vector<int>>res;void dfs(TreeNode*root,vector<int>path){ if(!root) return; //根节点为空直接返回 path.push_back(root->val); //作出选择 if(!root->left && !root->right) //如果到叶节点 { res.push_back(path); return; } dfs(root->left,path); //继续递归 dfs(root->right,path);}# **给定和的路径:**vo ...
KMP
KMP主要应用在字符串匹配上。
KMP的主要思想是当出现字符串不匹配时,可以知道一部分之前已经匹配的文本内容,可以利用这些信息避免从头再去做匹配了。
前缀表用来记录 字符串中相同的前缀与后缀字母的个数
NEXT前缀表
12345678910111213void getNext(int* next, const string& s) { int j = 0; next[0] = 0; for(int i = 1; i < s.size(); i++) { while (j > 0 && s[i] != s[j]) { // j要保证大于0,因为下面有取j-1作为数组下标的操作 j = next[j - 1]; // 注意这里,是要找前一位的对应的回退位置了 } if (s[i] == s[j]) { j++; } next[i] = j; }& ...
并查集
并查集(Union-Find)是一种树形的数据结构,用于处理不相交集合(也称为离散集合)的合并和查询问题。它主要用于动态连通性问题,即确定元素是否属于同一个集合。并查集的两个主要操作是“合并”(Union)和“查找”(Find),所以得名“并查集”。
1. 基本概念
集合(Set):一组不相交的元素,也就是说,每个集合中的元素都是唯一的,集合之间没有交集。
合并(Union):将两个不同的集合合并成一个集合。
查找(Find):找到一个元素所在集合的代表元素(根节点),通常用于判断两个元素是否在同一个集合中。
2. 树形表示在并查集中,每个集合可以用一棵树来表示,树的根节点代表整个集合。集合中的每个元素都是树中的一个节点,且每个节点都有一个指向其父节点的指针。
根节点(Root):一个集合的代表元素,它是树的根。查找操作的结果就是某个元素的根节点。
路径压缩(Path Compression):在查找操作中,通过将树上的所有节点直接连接到根节点来扁平化树结构,从而加速后续的查找操作。
3. 并查集的操作查找(Find)找到元素所在集合的根节点。
123456int find(in ...
排序算法
拓扑排序找到做事情的先后顺序,拓扑排序的结果可能不是唯一的如何排序?
找出图中入度为 0 的点,然后输出
删除与该点连接的边
重复 1、2 操作,直到图中没有点或者没有入度为 0 的点为止
实现拓扑排序借助队列,来一次 BFS 即可
初始化:把所有入度为 0 的点加入到队列中
当队列不为空的时候:拿出队头元素,加入到最终结果中;删除与该元素相连的边;判断:与删除边相连的点,是否入度变成 0 如果入度为 0,加入到队列中
借助STL容器灵活建图vector<vector> edges;unordered_map<int,vector> edges;
根据算法流程,灵活建图每个顶点的入度 vector in;
1课程表你这个学期必须选修 numCourses 门课程,记为 0 到 numCourses - 1 。
在选修某些课程之前需要一些先修课程。 先修课程按数组 prerequisites 给出,其中 prerequisites[i] = [ai, bi] ,表示如果要学习课程 ai 则 必须 先学习课程 bi 。
例如,先修课程对 [ ...
递归
1五子棋描述
NowCoder最近爱上了五子棋,现在给你一个棋局,请你帮忙判断其中有没有五子连珠(超过五颗也算)。
输入描述:输入有多组数据,每组数据为一张20x20的棋盘。其中黑子用“*”表示,白子用“+”表示,空白位置用“.”表示。
输出描述:如果棋盘上存在五子连珠(无论哪种颜色的棋子),输入“Yes”,否则输出“No”。
思路:判断一个点位上的四个方向是否有一个存在五子连珠(0,1) (1,0) (1,1) (1,-1)
解答
12345678910111213141516171819202122232425262728293031323334353637383940414243444546#include <iostream>#include <vector>using namespace std;bool checkDirection(vector<string>& board, int x, int y, int dx, int dy) { char player = board[x][y]; for (in ...
数据结构
优先队列 priority_queue仿函数less 升序 -》大根堆仿函数greater 降序 -》 小根堆
仿函数-》重载()
1合并 K 个升序链表给你一个链表数组,每个链表都已经按升序排列。
请你将所有链表合并到一个升序链表中,返回合并后的链表。
思路:将所有的节点放到优先队列中 一个一个拿出来
12345678910111213141516171819202122232425262728293031class Solution {public: struct cmp { bool operator()(ListNode* l1, ListNode* l2) { return l1->val > l2->val; } }; ListNode* mergeKLists(vector<ListNode*>& lists) { priority_queue<ListNode*, vector< ...