自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 srsran中线程池分析

线程池实际上就是为了解决频繁的创建和删除线程带来的巨大开销问题,利用线程池,可以复用线程来处理一些需要频繁执行的任务。首先线程池主要分为了三个部分。任务者线程,管理者线程,工作者线程。如下图所示

2023-05-23 10:25:15 613 2

原创 常量指针与指针常量的区别

指针常量:int* const p。表示const只作用于p,即p中存储的地址不能被改变,但是p中地址指向的内容可以改变,即他的解引用可以被改变,而他本身不能被改变。常量指针则表示指针本身的指向可以改变,但是指向的内容不能被改变。*p3=10//正确语句。*p3=10//错误语句。p3=p2//编译报错。p3=p2//正确语句。如 int *p1;如 int *p1;

2023-05-09 19:43:08 171

原创 int * p[10]与int(*p)[10]的区别

int *p[10] 相当于 一个大小为10的数组里面每个元素都是数据类型为int *p的数据,int p[10][10]则表示 大小为10的数组的每个元素都是 int p[10]。,可以理解为 int*p[10] 就是一个二维数组,定义了行的大小而未定义列的大小。而int(*p)[10]则相当于一个二维数组只定义了列大小为10,而未定义行大小。先看看二维数组int p[10][10]与int * p[10]

2023-05-09 19:26:41 465

原创 C++中从文本读数据到数组和写数据到文本

等同于 ifstream ifile;类ofstream,默认打开文件模式为可写。outfile << reslut[i]<< endl//跟cout类似。ifstream与ofstream 的主要区别就是一个默认可读,一个默认可写。#include<fstream> //该头文件包含了用于打开文件的类。类ifstream,默认打开模式为可读,同样可以通过构造函数将文件打开。如 ofstream ofile("C:/aa/s/s.txt");

2023-05-09 19:17:47 485

原创 关于二叉树的总结

完全二叉树:只有最后一层节点可以未满,其他层都是满节点。第n个节点,可以通过根节点进行位运算移动进行查找,比如查找第5个节点,其二进制为101,第一个数始终为1,0表示当前节点向左移动,1表示向右移动,101则表示第一个节点先向右移动,再向左移动即为第5个节点。平衡二叉树:左子树深度跟右子树深度的差值不能大于1。且所有节点的左子树和右子树均为平衡二叉树。完全二叉树的节点查找的应用可以参考leetcode的。二叉树主要有普通二叉树,完全二叉树,平衡二叉树。普通 二叉树没有任何节点位置和数量限制。

2023-04-03 21:17:06 125

原创 C++ STL容器汇总

(2)map/multimap,映射和多重映射,map的所有元素是pair对组,同时拥有键值(key)和实值(value),所有元素都会根据键值来自动排序进行存储。emplace_back()功能跟push_back()一样,只是底层实现不一样,emplace_back()直接在尾部生成元素,push_back () 首先会创建这个元素,然后再将这个元素拷贝或者移动到容器中。:交换当前容器与传入容器的内容。iterator erase ( iterator pos ),删除元素,返回下一个迭代器位置。

2023-04-03 11:00:47 182

原创 关于优先队列priority_queue的用法总结

Type为内部用来排序存储的数据类型,Container为初始元素的容器,Functional为比较数据类型。当存储的数据类型不为基本数据类型的时候,就需要指定上面3个参数,其中Functional为自己定义的类用来重构比较函数。优先队列是一种用堆实现的有序数据结构,在进行存储时默认顺序为大顶堆存储,由于其只能进或出的操作,因此将其称为队列的一种形式,而优先的意思就是进去后可以按优先级排序。

2023-03-31 14:24:33 93

原创 关于C++的map和unordered_map的总结

(1)首先是map与unordered_map的有序性和无序性的区别。map的存储顺序是按键值大小顺序存储,unordered_map:是按照存储的先后顺序进行存储。主要原因时其底部实现原理不同,map底层实现是红黑树,unordered_map底层实现是hash表。(2)map的第一个键值可以映射更多的数据类型,也就是说map不仅仅可以通过索引查找,还可以通过其他数据结构,如容器。unordered_map的查找效率比较高,如果仅仅是需要实现查询功能建议用unordered_map。

2023-03-31 11:09:38 316

原创 srsran源码分析----MIB的发送

srsran中MIB的源码并不是在RRC层进行数据流的编码,而是在物理层进行组装并进行编码发送,本文要讨论的内容就是MIB是如何组装并且发送的。

2022-09-22 21:40:07 926

原创 srsRAN源码分析----enb端协议栈是如何运作

整个协议栈的运作总是为物理层服务的,因此,协议栈的功能运行离不开物理层的调用,在物理层有着许多协议栈的接口,协议栈是如何在物理层被调用以及整个调用流程,是本文所要记录的内容。

2022-09-20 17:00:26 1512 1

原创 灰色预测模型

灰色预测模型一般用于给定的部分已知数据,预测未来的未知数据,例如根据前几天的天气预测未来天气,根据已有人口走向预测未来人口等等。这里主要介绍一阶一变量灰色预测模型,适用于单一变量的数据预测。......

2022-07-23 10:42:40 1737

原创 srsRAN源码中TTI的作用

TTI的作用

2022-06-01 11:06:32 803

原创 srsLTE源码分析(一)---enb协议栈入口

在srslte中,代码的运行机制主要采用线程池,多队列,时间序列等方式来运作的。他们之间相互配合协调运作各个功能。在进入整个程序之前,笔者先简单的说一下线程池的基本原理,线程池实际上主要有两个部分的线程来维护,一个是工作者线程,另一个是任务者线程。他们共同维护一个任务队列,任务者线程往任务队列里面加任务,工作者线程就从任务队列里边取任务然后运行。整个运作的过程非常的庞大,其中维护了许多的队列,笔者目前也还没有完全弄明白多队列与线程池之间的运作关系。今天主要分享一下笔者近期学习srsLTE源码所得的...

2022-04-21 10:57:28 1266

原创 LTE协议栈 MAC层学习总结(一)---随机接入过程

随机接入过程主要分为了四个部分第一个部分就是初始化参数:随机接入响应窗大小ra-ResponseWindowSize.(超过响应窗口大小则认为基站没有收到前导码,则重新发送)功率斜坡因数 powerRampingStep(前一次发送失败后加大功率再次发送)前导码传输的最大数量 preambleTransMax。(前导码重复发送的最大次数)初始前导码功率 preambleInitialReceivedTargetPower。(初始前导码发送功率)基于前导格式的偏移量 DELTA_PRE

2022-04-21 10:12:47 1464

原创 双向排序--栈的应用

分析:如果单纯只用排序的思维来解这道题的话,无论什么排序,他的时间复杂的都不能完全满足题目要求。所以需要考虑优化操作步骤。就是尽量减少升序和降序的操作。首先,当重复遇到降序操作时,那么只有这两次降序中的最大降序范围有效,比如对123456从1到3降序与1到4降序操作,两次操作后其实只有1到4有效,同样的道理两次连续的升序操作也只有范围大的有效。因此在遇到连续的0或者1时就需要将两次操作进行合并,例如...

2022-03-13 09:45:18 275

原创 C++ string类常见成员函数

在使用C++string相关操作时必须包含头文件#include<string>1.string构造函数例:string s(int n,char c),创建一个字符串s并初始化n个c字符;2.遍历访问通过操作符 s[i] 以及at(i)可直接访问第i个字符,区别时at会检查越界问题。3.容量大小相关操作s.capacity():返回当前字符串的容量。无参数s.size()返回当前字符串的大小。无参数s.length()返回当前字符串的长度,无参数s.resi

2022-03-12 16:39:08 2626 2

原创 浅谈快速排序与归并排序

快速排序与归并排序的平均时间都相差不大,但是当数据量n较小时快速排序最好,n较大时归并排序时间较快,但是所用的空间也会更大,可以根据自身需求来选择。下面来看看快速排序与归并排序的关键点。快速排序思想:重在分开排序。如果是升序排列。将较大的数放右边。较小的数放左边,然后对左右两边做同样的操作,即递归的调用自身。直到最后两个数排序完成就完成了整个序列。如下图所示归并排序思想:重在分开不排序,递归的进行分开,直到分到最后两个数,然后将最后两个数进行归并(将最后两个数按大小顺序放在一个新数组中,然

2022-03-10 10:09:00 864

原创 递归算法将整数转换为字符串

在C/C++语言中我们都知道整数转换为字符串是不能直接转换的。一位整数转换为字符也只能将其转换为整数的ASCII码。我们知道 0-9的数字的ASCII码对应于48~47。因此一位整数转换为字符串直接将整数+48后就可以强制转换。所以大致思路就是,将整数n 进行模10 ,即n%10得到n的个位,然后将其转换为字符加到字符串中,再将n/10进行迭代。举个例子123第一次迭代 123%10=3, str=3,再把123/10=12传入下一次迭代中第二次迭代 12%10=2,str=2+st

2022-03-06 16:33:36 9068 2

原创 Sine之舞---把递归用到极致的解法。

问题描述不妨设  An=sin(1–sin(2+sin(3–sin(4+...sin(n))...)  Sn=(...(A1+n)A2+n-1)A3+...+2)An+1  FJ想让奶牛们计算Sn的值,请你帮助FJ打印出Sn的完整表达式,以方便奶牛们做题。输入一个整数N,输出相应的Sn。如输入3,输出:((sin(1)+3)sin(1–sin(2))+2)sin(1–sin(2+sin(3)))+1题目的思路很简单,先把An算出来,再把An带入Sn中把Sn算出来。第一步计算An。

2022-03-06 16:04:29 660 1

原创 高精度阶乘--C++实现

本文主要介绍如何将很大的数相乘并按位存入数组中。

2022-03-06 12:39:22 2826 3

原创 正则表达式匹配--C++动态规划实现详解

题目描述:给你一个字符串 s 和一个字符规律 p,请你来实现一个支持 '.' 和 '*' 的正则表达式匹配。'.' 匹配任意单个字符'*' 匹配零个或多个前面的那一个元素所谓匹配,是要涵盖整个字符串s的,而不是部分字符串。解答:分析:根据题目意思 '.' 可以表示任意字符。*取决于前一个字符,所以可以把a*这样的字符看着整体。那么题目要求的意思是。字符串s与p相匹配,也就是将'.'和'*'进行转换后s=p,这里举两个例子:1.s="aa",p="a*" 这里把a*看着一个整体所...

2022-03-01 10:31:43 636

原创 Dijkstra最短路径算法详细过程附C++详细代码

一.算法思想将所有节点分为两组,一组是节点是,这些节点已经被计算起点到该点的最短路径,而另外一组是未被计算出来最短路径的节点。一开始,只有起点开始的最短路径被确认,并且为0,然后它继续遍历其他节点,并不断更新从起点到当前节点的最短路径。直到该点被访问后,则该点的最短路径被确定。二.如下图所示,用Dijkstra算法找出节点O到T的最短路径(1)首先初始化起点最短路径L(O)=0,剩下的点L(A)=L(B)=L(C)=L(D)=L(E)=L(F)=L(T)=∞;S是所有被遍历过的节..

2022-01-28 09:59:36 7655

空空如也

空空如也

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

TA关注的人

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