<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[whr19970424的博客]]></title><description><![CDATA[]]></description><link>https://blog.csdn.net/whr19970424</link><language>zh-cn</language><generator>https://blog.csdn.net/</generator><copyright><![CDATA[Copyright &copy; whr19970424]]></copyright><item><title><![CDATA[记一次黑群晖折腾的过程]]></title><link>https://blog.csdn.net/whr19970424/article/details/139418288</link><guid>https://blog.csdn.net/whr19970424/article/details/139418288</guid><author>whr19970424</author><pubDate>Mon, 03 Jun 2024 16:35:57 +0800</pubDate><description><![CDATA[以我为例，我的CPU是i7-4590，安装7.2系统的时候会有问题，所以我用的是7.1的系统。3、最后一点是，刷完系统后，如果find找不到你的NAS设备，可以尝试重启一下系统，如果还找不到，就用群晖软件Synology Assistant进行搜索安装，这个还是挺好用的。比如，在安装系统的时候，型号选择的是DS918+，版本号选择的是42496，那么在DSM下载中心也要选择与上述型号以及版本一致的补丁，不然会出现安装后无法开机的问题。如何在公网进行远程访问？]]></description><category></category></item><item><title><![CDATA[AGX Xavier 35.1.0 enable pps 过程全记录]]></title><link>https://blog.csdn.net/whr19970424/article/details/129824969</link><guid>https://blog.csdn.net/whr19970424/article/details/129824969</guid><author>whr19970424</author><pubDate>Tue, 28 Mar 2023 20:58:10 +0800</pubDate><description><![CDATA[目标准备环境参考。]]></description><category></category></item><item><title><![CDATA[五大排序code总结]]></title><link>https://blog.csdn.net/whr19970424/article/details/128897289</link><guid>https://blog.csdn.net/whr19970424/article/details/128897289</guid><author>whr19970424</author><pubDate>Mon, 06 Feb 2023 11:14:50 +0800</pubDate><description><![CDATA[merge函数这里，只需要理解，在第一次while循环时，有一端到头就结束；快排有两层循环，第一层循环条件是start < end，这是为了当两个元素相遇时才意味着遍历完所有元素，内层循环是每次都要找到与key相比，需要更新值的元素。选择排序是一个双层嵌套循环，每一次遍历找出max的位置，并在内层循环结束后swap。第一层循环从i=1开始遍历，j = i-1，key = arr[i]。j+1的位置其实就是key的位置，将这个位置的值替换为a[j]。插入的元素更新是在循环内，快排是在循环外。]]></description><category></category></item><item><title><![CDATA[归并排序Note]]></title><link>https://blog.csdn.net/whr19970424/article/details/128836630</link><guid>https://blog.csdn.net/whr19970424/article/details/128836630</guid><author>whr19970424</author><pubDate>Wed, 01 Feb 2023 17:59:22 +0800</pubDate><description><![CDATA[按照这个步骤，将最基础的两个元素合并成一个两个元素的数组，再按照上面的步骤进行排序，就会得到一个四个元素的数组，以此类推，最终就会得到一个完成序列。每两个队列（也就是两个元素）进行比较，小的放前面，大的放后面。注意下第27-30行，主要是理解在每次迭代中，如何将临时数组中的内容复制到原数组中。将一个待排序队列均分成两部分，将每一部分再进行均分，直到每部分只有一个元素。代码不难理解，只要理解了每一步需要做什么，就能比较容易的写出来。由于每部分只有一个元素，所以可以将其看成一个有序的队列。]]></description><category></category></item><item><title><![CDATA[快速排序Note]]></title><link>https://blog.csdn.net/whr19970424/article/details/128823304</link><guid>https://blog.csdn.net/whr19970424/article/details/128823304</guid><author>whr19970424</author><pubDate>Tue, 31 Jan 2023 20:54:36 +0800</pubDate><description><![CDATA[核心思想是，选择一个元素当做基准值，两个指针分别指向队列头和尾，尾部往前找，找到比基准值小的，交换其位置；头部指针往后找，找到比基准值大的，交换其位置。快排应该说是效率最高的经典排序算法，因为是经过优化的算法，所以其很重要。对基准值左右两侧的两个队列分别迭代进行上述步骤，即完成排序。基准值左侧的元素都比基准值小，右侧元素都比基准值大。此刻基准值的位置就是排好序后其所在的位置。]]></description><category></category></item><item><title><![CDATA[插入排序Note]]></title><link>https://blog.csdn.net/whr19970424/article/details/128808718</link><guid>https://blog.csdn.net/whr19970424/article/details/128808718</guid><author>whr19970424</author><pubDate>Mon, 30 Jan 2023 21:05:57 +0800</pubDate><description><![CDATA[第13行的意义，排列完序之后，因为之前j被-1了，并且第j+1个位置的数是和第j个位置的数一样，所以要将其更新。插入排序的原理与扑克牌很像，第一个元素视为已经排列好的，第二个及以后的元素视为新加入队列的。第二层循环的意义：从后往前找，如果后面的元素比前一个大，就让大的那个占据小的元素那个位置。代码总体需要琢磨一下，没有选择和冒泡那么容易理解。原理比较容易理解，代码不太容易理解。从后往前插入到队列里。]]></description><category></category></item><item><title><![CDATA[选择排序Note]]></title><link>https://blog.csdn.net/whr19970424/article/details/128807697</link><guid>https://blog.csdn.net/whr19970424/article/details/128807697</guid><author>whr19970424</author><pubDate>Mon, 30 Jan 2023 19:44:14 +0800</pubDate><description><![CDATA[选择排序也是一个比较基础的算法，其核心思想是：在每一次遍历中，找出最大（最小）的数，将其放到最前，比如，第一次循环找到最大的数，将其放到第一位，第二次找到第二大的数，将其放到第二位。不同点是冒泡排序的核心思想是与相邻元素去比较，一直将较大的数往后放，从而找出极值；都是在每一次遍历中找到最大的数，将其放到头部（尾部）。选择排序目的就是直接找到极值。]]></description><category></category></item><item><title><![CDATA[冒泡排序Note]]></title><link>https://blog.csdn.net/whr19970424/article/details/128801235</link><guid>https://blog.csdn.net/whr19970424/article/details/128801235</guid><author>whr19970424</author><pubDate>Mon, 30 Jan 2023 14:27:47 +0800</pubDate><description><![CDATA[使用了嵌套for循环，第二层用来找出遍历完一圈数组后，最大的元素，并将其放到最后，第一层循环用来重复这个过程，需要重复n-1次。在上面代码中，我特意打印出来每一次max的值，就是完成一圈遍历后找到的最大的那个值。今天学习一下冒泡排序，原理相当简单，就是做若干次循环，在每次循环中找到最大的那个数，然后将其放到最后，经过n-1（n为数组长度）次循环后，就实现了从小到大的排序。注意代码里每次遍历是如何找到最大的那个元素的，就是arr[i]和arr[i+1]去比较，然后i自增。在这里说几个点，便于理解代码。]]></description><category></category></item><item><title><![CDATA[Qt中搭建QtStudio3D开发环境]]></title><link>https://blog.csdn.net/whr19970424/article/details/127251847</link><guid>https://blog.csdn.net/whr19970424/article/details/127251847</guid><author>whr19970424</author><pubDate>Mon, 10 Oct 2022 20:49:45 +0800</pubDate><description><![CDATA[Qt中搭建QtStudio3D开发环境]]></description><category></category></item><item><title><![CDATA[数据处理——C++]]></title><link>https://blog.csdn.net/whr19970424/article/details/125795448</link><guid>https://blog.csdn.net/whr19970424/article/details/125795448</guid><author>whr19970424</author><pubDate>Fri, 15 Jul 2022 00:14:09 +0800</pubDate><description><![CDATA[原因在于，a和b都是int类型，其计算的结果也是int类型，而非float类型，如果想输出0.6666，需要将a和b的类型改成double或者float。上面代码的结果是c=0.0000。]]></description><category></category></item><item><title><![CDATA[友元、异常]]></title><link>https://blog.csdn.net/whr19970424/article/details/125550434</link><guid>https://blog.csdn.net/whr19970424/article/details/125550434</guid><author>whr19970424</author><pubDate>Thu, 30 Jun 2022 23:58:03 +0800</pubDate><description><![CDATA[学习了友元和异常的相关内容，在此做个笔记。一、友元一个类可以拥有友元函数，也可以拥有友元类友元函数或者友元类的所有方法都可以访问原始类的私有成员和保护成员友元只能由类自己定义，不能从外部强加友情，所以与面向对象的编程思想不矛盾友元类的场景：电视机与遥控器：遥控器可以更换频道，还可以控制输入源等，适合作为电视的友元类友元声明可以在类的私有，保护或者公有部分，位置无关紧要可以只让类的某一成员函数作为另一个类的友元函数，不过声明的时候需要用到前向声明（c++ primer plus p492有介绍）A可以成为B的]]></description><category></category></item><item><title><![CDATA[C++多态笔记]]></title><link>https://blog.csdn.net/whr19970424/article/details/125195269</link><guid>https://blog.csdn.net/whr19970424/article/details/125195269</guid><author>whr19970424</author><pubDate>Thu, 09 Jun 2022 00:38:11 +0800</pubDate><description><![CDATA[1、基类指针可以在不进行显式转换的时候指向派生类的对象，引用也是。例如：Brass是BrassPlus的父类。则如下代码是可以的：


2、基类指针或引用不能调用派生类的方法。如果基类指针可以调用派生类方法，则会出现类似如下情况：BrassPlus中的成员变量age是Brass类没有的，如果调用setAge()方法，是没有意义的，因为在基类中不存在这个变量。3、如果一个函数在基类中被声明为虚函数。在通过引用或者指针进行调用的时候将会确定使用哪一种方法。例如：......]]></description><category></category></item><item><title><![CDATA[指针传递，引用传递的区别]]></title><link>https://blog.csdn.net/whr19970424/article/details/125042346</link><guid>https://blog.csdn.net/whr19970424/article/details/125042346</guid><author>whr19970424</author><pubDate>Mon, 30 May 2022 10:48:11 +0800</pubDate><description><![CDATA[talk is cheap, show me the code.

所以我们直接上代码看区别：


#include &lt;iostream&gt;
using namespace std;

void swap1(int &amp;a, int &amp;b) {
    int temp = a;
    a = b;
    b= temp;
}

void swap2(int *a, int *b) {
    int temp = *a;
    *a = *b;
    *b = temp;
]]></description><category></category></item><item><title><![CDATA[Linux常用指令收集]]></title><link>https://blog.csdn.net/whr19970424/article/details/124882762</link><guid>https://blog.csdn.net/whr19970424/article/details/124882762</guid><author>whr19970424</author><pubDate>Fri, 20 May 2022 14:27:56 +0800</pubDate><description><![CDATA[查看进程内存占用：

1.ps -ef |grep xxx查看进程PID

2.top -p xxx

xxx为PID，内存占用和CPU占用就会以每秒钟一次的速率刷新




]]></description><category></category></item><item><title><![CDATA[成员初始化列表]]></title><link>https://blog.csdn.net/whr19970424/article/details/124809973</link><guid>https://blog.csdn.net/whr19970424/article/details/124809973</guid><author>whr19970424</author><pubDate>Mon, 16 May 2022 22:45:24 +0800</pubDate><description><![CDATA[如果我有一个类如下：


class A {
    private:
        const int qsize;
    public:
        A(int qs = 10);
}

那么下面这种写法是错误的：


A::A(int qs) {
    qsize = qs;
}

原因是因为，qsize是const的，只能被初始化，不能被赋值，这种情况下，应该怎么办呢？

c++给出了答案：成员初始化列表。

从概念上说，在执行构造函数时，对象会在执行括号里的代码之前被创建，分配内存，然后]]></description><category></category></item><item><title><![CDATA[cin.getline()方法使用的坑]]></title><link>https://blog.csdn.net/whr19970424/article/details/124700217</link><guid>https://blog.csdn.net/whr19970424/article/details/124700217</guid><author>whr19970424</author><pubDate>Tue, 10 May 2022 23:27:42 +0800</pubDate><description><![CDATA[今天本来想练习下指针指向对象的使用，结果在使用getline接收键盘输入的时候碰到一个很坑的问题，搞了半天才找到原因，所以要记录下。

先贴一段代码：


#include "string1.h"
#include &lt;iostream&gt;

using namespace std;

const int ArSize = 10;
const int MaxLen = 81;
int main() {
    cout &lt;&lt; "please enter your name:" &lt;&]]></description><category></category></item><item><title><![CDATA[#pragma pack()的作用]]></title><link>https://blog.csdn.net/whr19970424/article/details/124382386</link><guid>https://blog.csdn.net/whr19970424/article/details/124382386</guid><author>whr19970424</author><pubDate>Tue, 10 May 2022 23:18:09 +0800</pubDate><description><![CDATA[今天有同事问我#pragma pack(1)是干嘛的，之前没用过，遂百度。

原来这东西是用来指定内存对齐方式的。

我们知道，定义一个struct的时候，其默认分配空间为4的倍数。但是用#pragma pack(1)之后，其分配的空间就是1的倍数了，也就是网上说的内存连续。

举个例子：


Struct A {
    char a;
    double b;
};

这个时候我去查看Struct A的sizeof，会发现值为16，这是因为内存对齐（如果不知道为啥是16，可以百度下内存对齐机制）。

]]></description><category></category></item><item><title><![CDATA[NPOS配置及相关应用说明]]></title><link>https://blog.csdn.net/whr19970424/article/details/123986236</link><guid>https://blog.csdn.net/whr19970424/article/details/123986236</guid><author>whr19970424</author><pubDate>Wed, 06 Apr 2022 15:08:01 +0800</pubDate><description><![CDATA[一、Ubuntu18.04配置Npos220s

1、连线：

电源线
	一个串口被转成USB连接个人PC（记为USB1），用于接收drv数据
	自带的USB用于配置Npos（记为USB2）
ps：以上两个可以只连其一，需要drv数据就连USB1，需要修改配置就连USB2，当然也可以同时连接

2、USB线驱动安装：

USB1使用需安装驱动：moxa

驱动在oss下，下载完成需解压，命令为：

tar -xf moxa-uport-1100-series-linux-kernel-5.x-driver-]]></description><category></category></item><item><title><![CDATA[Ubuntu系统在QT中配置OpenGL（极简）]]></title><link>https://blog.csdn.net/whr19970424/article/details/123129997</link><guid>https://blog.csdn.net/whr19970424/article/details/123129997</guid><author>whr19970424</author><pubDate>Fri, 25 Feb 2022 11:56:02 +0800</pubDate><description><![CDATA[1、安装openGL

sudo apt-get install mesa-common-dev libgl1-mesa-dev libglu1-mesa-dev freeglut3-dev



2、在.pro文件中加QT += opengl



可以在代码中引用了：






]]></description><category></category></item><item><title><![CDATA[Ubuntu 20.04安装VTK]]></title><link>https://blog.csdn.net/whr19970424/article/details/122667867</link><guid>https://blog.csdn.net/whr19970424/article/details/122667867</guid><author>whr19970424</author><pubDate>Mon, 24 Jan 2022 15:16:23 +0800</pubDate><description><![CDATA[今天安装了VTK 8.1.0，过程记录如下：

因为之前没有安装过，所以找了一个比较基础的教程，链接如下：

vtk在linux下的安裝（12月8日更新） - IT閱讀https://www.itread01.com/content/1547814967.html这个还算是比较详细和基础的，我自己的安装过程和他有一点不一样的是VTK资源的获取，我是在通过wget命令下载的VTK资源，然后版本是8.1.0(这里可以通过很多方式获取到，比如官网下载，git clone等等，不一定要按照wget命令)。下载之后需]]></description><category></category></item></channel></rss>