Jack Huang's Blog


  • 首页

  • 标签

  • 归档

  • 搜索

CPlusPlus之引用符号&的用法

发表于 2021-11-09 | 更新于 2024-04-26

符号&在C语言中代表取址符,在C++中则代表引用,是C++引入的新语言特性,是C++常用的一个重要内容之一,正确、灵活地使用引用,可以使程序简洁、高效。

引用简介

引用就是某一变量(目标)的一个别名,对引用的操作与对变量直接操作完全一样。

引用的声明方法:类型标识符 &引用名=目标变量名;

1
int a; int &ra=a; //定义引用ra,它是变量a的引用,即别名

引用作为参数

引用的一个重要作用就是作为函数的参数。以前的C语言中函数参数传递是值传递,如果有大块数据作为参数传递的时候,采用的方案往往是指针,因为这样可以避免将整块数据全部压栈,可以提高程序的效率。但是现在(C++中)又增加了一种同样有效率的选择(在某些特殊情况下又是必须的选择),就是引用。

1
2
void swap(int &p1, int &p2) //此处函数的形参p1, p2都是引用
{ int p; p=p1; p1=p2; p2=p; }

引用作为返回值

要以引用返回函数值,则函数定义时要按以下格式:

类型标识符 &函数名(形参列表及类型说明)
{函数体}

1
2
3
4
5
float &fn2(float r) //定义函数fn2,它以引用方式返回函数值
{
 temp=(float)(r*r*3.14);
 return temp;
}

引用作为返回值,必须遵守以下规则:

  • 不能返回局部变量的引用。
  • 不能返回函数内部new分配的内存的引用。
  • 可以返回类成员的引用,但最好是const。

参考链接

  1. c++&的用法,by Knigh_art.
  2. 我所理解的C++类设计中private成员变量和返回const引用类型,by Huming.
  3. C++返回引用的需求,by 唐淼.

CPlusPlus之Boost的JSON库操作

发表于 2021-11-08 | 更新于 2021-11-09

12月11日,Boost社区发布了1.75版本,带来了JSON,LEAF,PFR三个新库。其中JSON自然是json格式的解析库,来自Vinnie Falco和Krystian Stasiowski。

JSON库简介

其实在之前,Boost就已经有能够解析JSON的库了,名字叫做Boost.PropertyTree。Boost.PropertyTree不仅仅能够解析JSON,还能解析XML,INI和INFO格式的文件。但是由于成文较早及需要兼容其他的数据格式,相比较于其他的C++解析库,其显得比较笨重,使用的时候有很多的不方便。且存在以下问题:

  • 不支持 JSON 中的空数组
  • 所有类型信息都丢失了(所有内容都必须是 JSON 字符串)

Boost.JSON相对于Boost.PropertyTree来所,其只能支持JSON格式的解析,但是其使用方法更为简便,直接。华丽胡哨的东西也更多了。

参考链接

  1. Boost.JSON Boost的JSON解析库(1.75首发),by ink19.
  2. c++ - 如何使用 json 解析器的 boost property_tree 创建空数组节点,by coder.
  3. 【C++/Boost】 新增的JSON Library简介,by codeleading.

Ubuntu-18-04-Server安装图形界面和远程桌面连接

发表于 2021-11-06

远程云主机部署的Ubuntu 18.04 Server没有图形用户界面,而且自带的远程访问客户端不给力,因此考虑给Ubuntu 18.04 Server安装图形用户界面,同时打算使用Windows的

安装图形界面

Linux服务器未安装桌面环境。我们的第一步是安装X11和一个轻量级的桌面环境,该环境将充当Xrdp的后端。

Ubuntu存储库中有几种可用的桌面环境(DE)。我们将安装 Xfce 。这是一个快速,稳定且轻巧的桌面环境,非常适合在远程服务器上使用。

1
sudo apt update sudo apt install xfce4 xfce4-goodies xorg dbus-x11 x11-xserver-utils

远程桌面连接

Xrdp是Microsoft远程桌面协议(RDP)的开源实现,允许您以图形方式控制远程系统。使用RDP,您可以登录到远程计算机并创建真实的桌面会话,就像登录到本地计算机一样。如果您想要开放源代码的远程桌面访问解决方案,请使用 VNC 。

安装Xrdp

1
2
sudo apt install xrdp
sudo systemctl status xrdp

配置Xrdp

1
2
3
4
5
sudo nano /etc/xrdp/xrdp.ini
# 在文件末尾添加以下行:
# exec startxfce4
# 保存文件并重新启动Xrdp服务
sudo systemctl restart xrdp

配置防火墙

1
2
sudo ufw allow from 192.168.1.0/24 to any port 3389
sudo ufw allow 3389

连接到Xrdp服务器

如果您是Windows用户,则可以使用默认的RDP客户端。在Windows搜索栏中键入“ remote”,然后单击“ Remote Desktop Connection”。这将打开RDP客户端。在计算机字段中输入远程服务器IP地址,然后单击“连接”。

参考链接

  1. Ubuntu server 18.04 安装图形化界面环境,by alits.
  2. 如何在Ubuntu 18.04上安装Xrdp Server(远程桌面),by myfreax.

CPlusPlus之Boost入门

发表于 2021-11-01 | 更新于 2021-11-08

Boost C++ 库(Libraries)是一组扩展C++功能的经过同行评审(Peer-reviewed)且开放源码程序库。大多数的函数为了能够以开放源码或者封闭项目的方式运作,而许可于Boost软件许可协议(Boost Software License)之下。许多Boost的开发人员是来自C++标准委员会,而部分的Boost库成为C++的TR1标准之一。

为了要确保库的效率与弹性,Boost广泛的使用模板(template)功能。而它是针对各式领域的C++用户与应用领域(Application Domain)上,包含的库类别从像smart_ptr 库(页面存档备份,存于互联网档案馆)这种类通用库,到像是文件系统的操作系统抽象层,甚至能够利用Boost来开发额外的库或是给高级的C++用户利用,像是MPL。

源代码下载

1
2
git clone https://github.com/boostorg/boost.git
git submodule --update

编译过程

生成编译工具b2.exe:

1
2
cd %BOOST_ROOT%
bootstrap.bat
  • 完整安装boost
1
b2 --buildtype=complete
  • 定制安装boost
1
2
3
4
5
6
# 可查看所有必须编译才能使用的库
b2 --show-libraries
# 单独编译安装regex库:
b2 --with-regex link=static runtime-link=shared threading=multi –-stagedir=build stage
# 生成include文件夹
b2 --with-regex link=static runtime-link=shared threading=multi --prefix=build install

编译结果在stage\lib目录下生成regex库(Debug/Release):

1
2
libboost_regex-vc100-mt-1_77.lib
libboost_regex-vc100-mt-gd-1_77.lib

相关参数的含义:
stage 仅创建和安装库文件(不创建头文件),可以用 –stagedir= 选项指定库的安装位置,默认安装在当前目录下的stage文件夹内。
–with- 创建和安装指定的库,如果使用了这个选项,则仅仅指定的库被创建,其它库不被创建。如果不指定这个选项,默认创建所有需要编译安装的库。
link=static指定生成静态regex库
threading=multi指定生成多线程库
runtime-link=shared指定动态链接C和C++ 运行库

参考链接

  1. Boost编译与使用,by luckyum.
  2. Parsing Command Line Arguments in C++?,by stackoverflow.
  3. Boost.Program_options,by Boost.
  4. Boost.JSON,by Boost.
  5. Boost C++ Libraries,by wikipedia.
  6. Boost Getting Started on Windows,by Boost.
  7. Windows平台下boost库的编译和调用,by JasonLiThirty.
  8. windows下编译和安装boost库,by rangers.
  9. C++静态库与动态库,by rangers.
  10. boost::program_options 用法详解,by morning_color.
  11. C++ Boost JSON解析库的使用,by miaoerduo.
  12. boost.xml_parser中文字符问题,by mob604756f44f2a .
  13. Creating JSON arrays in Boost using Property Trees,by stackoverflow.
  14. Boost.JSON Boost的JSON解析库(1.75首发),by ink19.
  15. c++ - 如何使用 json 解析器的 boost property_tree 创建空数组节点,by coder.

C/C++文件读写操作

发表于 2021-10-30

基于C的文件操作

流式文件操作

这种方式的文件操作有一个重要的结构FILE,FILE在头文件stdio.h中定义。

I/O文件操作

这是C提供的另一种文件操作,它是通过直接存/取文件来完成对文件的处理,而上篇所说流式文件操作是通过缓冲区来进行;流式文件操作是围绕一个FILE指 针来进行,而此类文件操作是围绕一个文件的“句柄”来进行。

基于C++的文件操作

在C++中,有一个stream这个类,所有的I/O都以这个“流”类为基础的,包括我们要认识的文件I/O。

基于WINAPI的文件操作

WINAPI提供了两种文件操作函数,一组是为了和16位程序兼容,这种函数比较简单;而另一种是专门为32位程序设计。

参考链接

  1. C/C++文件输入输出操作——FILE*、fstream、windowsAPI,by 苦涩的茶.
  2. C++的iostream标准库介绍+使用详解(转),by 极客先锋.
  3. malloc和free函数详解,by Healtheon.
  4. C/C++堆、栈及静态数据区详解,by Healtheon.
  5. C++——使用变量作为数组长度,by dreamiond.
  6. C++ STL中容器的使用全面总结,by jimofanhua0000.
  7. c++ new/delete的用法,by liuhmmjj.

WebSocket协议分析方法

发表于 2021-10-13 | 更新于 2021-10-16

参考链接

  1. AG通过WSS协议实现自动化分析,by qq.
  2. Bilibili 直播弹幕抓取 (1):WebSocket,by 澪同学.
  3. Bilibili 直播弹幕抓取 (2):Fiddler 与 WireShark,by 澪同学.
  4. Bilibili 直播弹幕抓取 (3): 弹幕传输协议分析,by 澪同学.
  5. Burpsuit注册机使用时报错java.math.MutableBigInteger.inverseMod64(J)J,by 云勺.
  6. Burp Suite 实战指南,by t0data@hotmail.com.

Pipenv最新一代Python项目环境与依赖管理工具

发表于 2021-09-21 | 更新于 2022-05-14

Pipenv是一个工具,旨在将所有打包世界(bundler、composer、npm、cargo、yarn 等)中最好的东西带到 Python 世界。在我们的世界中,Windows 是一等公民。

它会自动为您的项目创建和管理 virtualenv,并Pipfile在您安装/卸载软件包时从您的项目中添加/删除软件包。它还生成Pipfile.lock用于生成确定性构建的 ever-important 。

Pipenv 主要旨在为应用程序的用户和开发人员提供一种设置工作环境的简单方法。

Pipenv 寻求解决的问题是多方面的:

  • 您不再需要单独使用pip和virtualenv。他们一起工作。
  • 管理requirements.txt文件可能会有问题,因此 Pipenv 使用* * Pipfile并将Pipfile.lock抽象依赖声明与上次测试的组合分开。
  • 哈希值无处不在,总是如此。安全。自动暴露安全漏洞。
  • 强烈鼓励使用最新版本的依赖项,以尽量减少过时组件带来的安全风险。
  • 让您深入了解您的依赖关系图(例如)。$ pipenv graph
  • 通过加载.env文件简化开发工作流程。

安装

如果您已经拥有 Python 和 pip,您可以轻松地将 Pipenv 安装到您的主目录中:

1
$ pip install pipenv

创建虚拟环境

1
2
$ cd your_project_dir
$ pipenv install

激活虚拟环境

1
pipenv shell

安装依赖到虚拟环境

1
$ pipenv install Scrapy

记录依赖

使用Pipenv时,什么都不必做,Pipenv会自动帮你管理依赖。Pipenv会在你创建虚拟环境时自动创建Pipfile和Pipfile.lock文件(如果不存在),并且会在你使用pipenv install和pipenv uninstall命令安装和卸载包时自动更新Pipfile和Pipfile.lock。

在部署环境安装依赖

使用Pipenv则只需要执行pipenv install,它会自动安装Pipfile中记录的依赖:

1
$ pipenv install

参考链接

  1. Virtualenv简易教程,by jackhuang.
  2. 最全的Python虚拟环境使用方法,by Stevent.
  3. Pipenv:新一代Python项目环境与依赖管理工具,by 李辉.
  4. Python 修改 pip 源为国内源,by 花晓星辰.
  5. pip安装包时出现 ValueError: check_hostname requires server_hostname 错误,by 胡小包.
  6. pyenv install build failed:Fatal: You must get working getaddrinfo() function.,by Honcy Ye.

搜索算法集锦

发表于 2021-08-07

记录各种经典的搜索算法。

Dijkstra算法

该算法解决了图 ${\displaystyle G=\langle V,E\rangle }$上带权的单源最短路径问题。

A*搜索算法

A搜索算法(A search algorithm)是一种在图形平面上,有多个节点的路径,求出最低通过成本的算法。常用于游戏中的NPC的移动计算,或网络游戏的BOT的移动计算上。

该算法综合了BFS和Dijkstra算法的优点:在进行启发式搜索提高算法效率的同时,可以保证找到一条最优路径(基于评估函数)。

RRT*搜索算法

基于随机采样的路径规划算法。这类算法适用于高维度空间,它们以概率完备性(当时间接近无限时一定有解)来代替完备性,从而提高搜索效率。

参考链接

  1. Dijkstra算法,by wikipedia.
  2. A*搜索算法,by wikipedia.
  3. 路径规划 | 图搜索算法:DFS、BFS、GBFS、Dijkstra、A*,by 鬼木士.
  4. 路径规划 | 随机采样算法:PRM、RRT、RRT-Connect、RRT*,by 鬼木士.
  5. 全局路径规划:图搜索算法介绍4(RRT/RRT*),by gophae.

空战战术集锦

发表于 2021-08-06 | 更新于 2021-08-17

参考链接

  1. 超视距空战初探,by 殇璃魂.
  2. 战争雷霆空战入门进阶教程 空战机动战术详解【1】,by 大眼小乌贼.
  3. 超视距空战的发展及其局限性,by 新浪军事.
  4. 击剑云端——现代超视距空战基本动作详解,by 万年炎帝.
  5. 不懂这些基本的战机作战技能,别说你是空战迷!,by 军武.

科技论文写作技巧

发表于 2021-08-04 | 更新于 2022-03-29

科技论文文本结构通常由标题、作者、摘要、关键词、引言、方法、结果、讨论、结论等部分组成。下面总结记录各部分写作方法。

参考文献

  1. 科技论文,by 百度百科.
  2. 科技论文的引言怎么写 ,by PaperPP论文查重.
  3. 论文中Conclusion写作的几大要点,附有实例指导、写作模板,by 美辑编译.
  4. 科技论文的结论如何写作?,by 第2导师.
  5. 编辑视角下,论文摘要、引言、结论怎么写?,by qq.
上一页1…232425…55下一页

Jack Huang

546 日志
70 标签
© 2026 Jack Huang
由 Hexo 强力驱动
|
主题 — NexT.Muse