自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 GitHub生成SSH密钥,

生成并配置SSH密钥将公钥添加到GitHub账户。测试SSH连接确保可以与GitHub通信。克隆仓库,即便是别人的公开仓库,照以下步骤生成SSH密钥,并将公钥添加到GitHub账户中:这个错误是由于SSH密钥未正确配置或未添加到GitHub账户中导致的。GitHub通过SSH进行身份验证时,需要确保本地机器的SSH公钥已经被添加到你的GitHub账户中。

2024-10-14 21:49:02 448

原创 计算机网络第二章:作业 2: UDP ping 程序

在这个实验中,你将通过Python使用UDP套接字编程,编写一个ping程序。Ping程序是用来测试网络延迟的工具,客户端通过发送请求到服务器,然后计算往返时间(RTT),并处理可能的丢包。客户端程序需要在发送10次Ping请求后计算最小、最大和平均RTT,同时计算丢包率。通过这些修改,客户端程序在完成所有Ping操作后,会输出最小、最大和平均RTT,并计算出丢包率。我们现在需要编写客户端程序,它将向服务器发送10个ping请求,并显示每次请求的结果,包括往返时间或超时。

2024-09-19 14:15:03 820 1

原创 计算机网络第二章:作业 1: Web 服务器

通过本次实验,我们实现了一个简单的Python Web服务器,并学会了如何使用套接字来处理HTTP请求。构建了Web服务器处理HTTP请求。实现了文件读取及HTTP响应功能。处理了404错误的情况。使用浏览器测试了服务器的功能,并成功获取文件内容以及处理不存在的文件。

2024-09-18 18:19:23 1147

原创 计算机网络第二章(部分)

网络体系结构描述了整个网络如何组织、分层以及每一层的功能和协议。最常见的网络体系结构是,其分为物理层、链路层、网络层、传输层和应用层。:应用程序体系结构专注于应用程序如何设计和组织,如客户端-服务器架构、P2P(对等网络)架构等。应用程序体系结构决定了应用程序各个部分如何相互通信和协作。简而言之,关注于数据如何在网络上传输,而则关注应用程序的设计与交互模式。通常,客户进程主动向服务器进程发送请求,服务器进程被动等待客户进程的连接。通过组合使用和,一个进程可以唯一地标识和定位另一台主机上的进程。

2024-09-18 18:06:26 1848

原创 ubuntu使用Vscode进行实现TCP编程

在Ubuntu上使用VSCode实现TCP编程的完整流程包括安装必要的工具、编写TCP客户端和服务器代码、编译和运行程序。这里将介绍如何使用Python或C语言编写简单的TCP客户端和服务器,并在VSCode上运行。

2024-09-18 16:42:23 945

原创 ubuntu使用Vscode进行实现UDP编程

在Ubuntu上使用VSCode进行UDP编程的完整流程包括安装所需的工具、编写客户端和服务器端的UDP程序、编译和运行。

2024-09-18 15:45:26 652

原创 顶层const和底层const

在C++中,const和,它们之间的区别在于它们修饰的对象及其在不同场景中的作用。

2024-09-08 21:55:21 1349

原创 搭建一个本地 SMTP 服务器

由于 SMTP 服务器的开放端口和安全性问题,许多现代邮件服务器不再允许直接通过连接到标准的 25 端口发送邮件,尤其是未经认证的用户。因此,许多公共电子邮件服务商如 Gmail、Yahoo 等也禁用了这种方式,转而要求使用更安全的加密连接,如通过 SSL/TLS 连接发送邮件。不过,如果你有权限使用某个 SMTP 服务器(比如你自己公司的邮件服务器或本地服务器),你可以联系你的邮件服务器管理员获取服务器的名称和端口号,确保你可以通过 Telnet 进行实验。

2024-09-08 21:55:17 815

原创 Fail to sync with InifiniCloud WebDAV - intermediate certificate issue 无法与 InifiniCloud WebDAV 同步 -

本文档将指导您如何下载并导入必要的证书到Firefox,以确保Zotero和InfiniCloud之间的连接安全可靠。请仔细按照以下步骤操作。

2024-08-11 15:27:00 402

原创 getline

getline是 C++ 标准库中的一个函数,用于从输入流中读取一行文本。

2024-07-17 22:48:03 988

原创 C++ 中的流操纵器(Stream Manipulators)

C++ 中的流操纵器(Stream Manipulators)是非常有用的工具,用于控制输入和输出流的格式和行为。下面是一些常见的流操纵器及其详细说明和使用示例。

2024-07-11 21:27:15 942

原创 会改变流的关键字

这些关键字会改变流的行为。每个关键字都会影响输出流(如std::cout)的行为,确保输出按照预期的格式显示。

2024-07-11 21:12:58 191

原创 `flush` 和 `endl` 操纵器在 C++ 中的作用和原理。

flush用于在不换行的情况下强制刷新缓冲区,适用于需要实时显示数据但保持在同一行的情况。endl用于在插入换行符后刷新缓冲区,适用于需要换行并实时显示数据的情况。flush操纵器:用于强制刷新缓冲区,将数据立即输出,不插入任何字符。endl操纵器:用于插入一个换行符并刷新缓冲区,确保数据立即输出并换行。通过合理使用flush和endl,可以更好地控制数据的输出时机和格式,提高程序的实时性和可读性。

2024-07-11 21:12:11 694

原创 计算机流(Stream)

流是一种数据传输方式,它允许数据像流水一样在计算机的不同部分之间移动。可以将它比作水管中的水流,通过管道从一个地方流向另一个地方。流可以是输入流(例如从键盘输入数据到程序)或输出流(例如将数据从程序输出到屏幕)。位是计算机中最小的数据单位,可以是0或1。这就像是一个开关,只有开(1)或关(0)两种状态。多个位可以组成字节,表示更多的信息。缓冲区是一个临时存储区域,用于在数据传输过程中平衡速度差异。

2024-07-11 19:37:51 355

原创 C++ 标准库中的异常类

类表示逻辑上的错误,通常是可以通过修复代码来避免的错误。: 表示参数超出函数定义域。: 表示传递了无效参数。: 表示长度错误,通常是容器超出了其最大大小。: 表示访问超出了容器的有效范围。类表示运行时错误,通常是无法通过修改代码避免的错误。: 表示算术运算导致的溢出错误。: 表示算术运算导致的下溢错误。

2024-07-11 19:34:43 615

原创 The Missing Semester of Your CS Education -----Shell

重定向输出到文件,覆盖原有内容。:重定向输入从文件读取。>>:重定向输出到文件,追加内容。:将一个程序的输出作为另一个程序的输入。这些重定向和管道操作在shell编程中非常常用,能够大大提高命令行操作的灵活性和效率。这个命令组合用于列出当前目录中最后一个文件(按ls -l列表顺序)的详细信息。通过这种方式,你可以快速查看目录中最新添加或最后一个文件的详细信息。重定向操作的权限问题可以通过tee或sudo sh -c方式解决。# 方法1:使用 tee 命令。

2024-06-06 12:49:52 804 1

原创 Github手动推送和自动推送

我们可以编写一个Shell脚本来自动化这个过程。

2024-06-03 13:39:07 1258

原创 C++的智能指针

智能指针是C++中用于自动管理动态分配内存的对象,它通过包装原始指针,提供了类似指针的接口,并在适当的时候自动释放内存,从而帮助避免内存泄露。C++标准库提供了几种智能指针,其中最常用的是和。

2024-04-13 10:59:02 732

原创 C++的排序

std::sort允许你通过自定义比较函数来指定排序顺序,这在处理复杂数据结构时特别有用。比如,如果你有一个存储人员信息的vector,每个人都有姓名和年龄属性,你可能想要根据年龄来排序这个列表。int age;// 构造函数// 比较函数return 0;

2024-04-11 21:52:18 1169 1

原创 C++ 运算符与重载

运算符重载是 C++ 中的一种特性,它允许我们为自定义类型定义运算符的行为。这意味着你可以对你自己创建的类使用诸如等运算符,并定义它们对你的类对象进行操作时应该做什么。让我们通过一个简单的例子来理解运算符重载:创建一个Vector2D类,它表示二维空间中的向量,并重载加法运算符来实现两个向量的相加。在这个例子中,我们定义了一个表示二维向量的类Vector2D,并重载了两个运算符:加法运算符:它允许我们通过简单地使用符号来将两个Vector2D对象相加。这个运算符函数接受一个Vector2D。

2024-04-09 14:35:24 626

原创 C++ 隐式转换和explicit关键字

像是你对音箱说:“播放音乐。在 C++ 中,当你有一个只需要一个参数的构造函数时,编译器会自动“理解”你想如何转换类型。比如,如果你有一个表示数字的类,当你给它一个整数时,编译器会自动创建这个类的对象,就像音箱自动理解命令一样。这有时可能导致意外的行为,特别是在构造函数只有一个参数时,它可以被用来隐式转换为类类型。关键字,意味着当你想用一个值来创建对象时,你需要明确地告诉编译器你的意图,编译器不会自动为你做类型转换。关键字用来防止编译器自作主张地为你做出可能不是你想要的决定,它要求你必须明确你的意图。

2024-04-09 14:32:59 433

原创 C++ new关键字

它不仅分配了内存,还调用了对象的构造函数来初始化对象。这里有一个简单的示例,说明如何使用。这行代码在堆上分配了一个具有5个整数的数组。在创建基本数据类型数组时,不会调用构造函数,因为基本数据类型没有构造函数。)来管理动态分配的内存,因为智能指针能够帮助我们自动释放内存,从而避免内存泄露。这是现代C++的一个最佳实践。在实际的C++项目中,我们通常推荐使用智能指针(如。返回的是指向该对象的指针。如果你创建的是一个对象,使用。如果你创建的是一个数组,需要使用。这行代码在堆上分配内存来存储一个。

2024-04-09 14:32:09 261

原创 C++创建并初始化对象

在 C++ 中,可以在堆(也称为自由存储区)或栈上创建和初始化对象。这两种分配内存的方法具有不同的生命周期和管理方式。记住,在使用堆时必须谨慎管理内存,以避免内存泄漏。在现代 C++ 编程中,通常推荐使用智能指针(如。)来自动管理堆内存。

2024-04-09 14:31:25 234

原创 C++的成员初始化列表

在 C++ 中,成员初始化列表是用于初始化类对象成员的语法结构,它在对象的构造函数中使用。)之后使用成员初始化列表进行初始化。这种方式比在构造函数体内部分配值更加高效,并且对于。这些成员通过在构造函数后的冒号(和引用成员是必须的。的一个实例,并调用了。

2024-04-09 14:29:23 263

原创 C++中的mutable

关键字是用来说明即使一个对象是常量,对象内的某个成员变量也可以被修改。通常,这个关键字用于类的成员变量。让我给你一个简单的例子来说明这个概念。方法,也不能修改它的任何成员变量。在上面的代码中,如果你尝试取消注释。,你会得到一个编译错误,因为。可以被调用,并且它可以修改。方法中,你仍然可以修改。函数中,我们创建了一个。方法,它仍然可以调用。

2024-04-09 14:27:22 352

原创 C++中的const

const是C++中一个非常有用的特性,它提供了多层次的保护,确保数据不会被意外修改,同时也使得代码更加清晰、安全和易于维护。掌握const的使用,能够让你写出更加健壮的C++代码。

2024-04-09 14:22:41 664

原创 线性共轭梯度法

在数学和优化问题中,假设我们有一个正定矩阵A。那么,两个非零向量p和q被认为是在ApTAq0pTAq0这个等式意味着,当向量p和向量q通过矩阵A变换后,它们在新空间中是正交的。这里的p^T表示向量p的转置。线性共轭梯度法是一种迭代方法,用于解决形如Ax = b的线性方程组,其中A是一个正定矩阵。该方法特别适用于那些矩阵太大,使得直接解法(如高斯消元法)不切实际的情况。LCG方法的优点是不需要显式地存储矩阵A,只需能够计算矩阵A与任意向量的乘积即可。

2024-04-04 18:14:01 936 1

原创 C++中的数组

栈内存的分配和释放是自动管理的,当数组的生命周期结束时(例如,声明它的函数返回时),内存会自动被释放。这种方式简单且快速,但由于栈的大小有限,它不适用于大量数据的存储,且数组的大小在编译时必须是已知的。图书管理员会去库房(堆内存)找到一个合适的书架给你,并告诉你书架的位置(返回一个指向书架的指针)。使用这种方法,由于内存是在运行时分配的,可以根据程序的需要动态决定数组的大小。:简单方便,但书架的大小是固定的,且你不能把书架带走(函数结束就释放了)。释放它),图书管理员才会收回书架,让其他人使用。

2024-04-04 15:08:36 302 1

原创 C++接口(纯虚函数)

通过这个比喻,希望你能更好地理解C++中接口(纯虚函数)的概念:它们定义了一组接口,任何继承这些接口的类都必须实现这些接口中的方法。一个包含纯虚函数的类不能被实例化,它必须由其他类继承并实现所有的纯虚函数,这些派生类才能被实例化。通过这个例子,你可以看到C++中通过纯虚函数定义接口的方式,以及如何通过派生类来实现这些接口。在C++中,接口可以通过定义一个包含纯虚函数的抽象类来实现。下面是一个简单的例子,来说明C++中如何使用纯虚函数来定义接口,并如何由其他类来实现这个接口。的抽象基类,它包含一个纯虚函数。

2024-04-04 15:01:17 423

原创 C++虚函数

虚函数在C++中用于实现多态,它允许子类重写父类的方法。当通过父类指针或引用调用一个虚函数时,会根据对象的实际类型来调用对应的函数,这就是多态的体现。想象我们在做一个动物园的软件,我们想让每种动物发出自己的叫声。在C++中,我们可以使用虚函数来实现这一点,这样不同的动物就可以有不同的实现方式了。通过这个示例,你可以看到虚函数如何允许在运行时根据对象的实际类型调用相应的函数。,这个函数用来输出动物的叫声。是一个虚函数,所以实际调用的是指针所指对象的类型的。用一个更简单易懂的例子来解释虚函数的作用吧!

2024-04-04 14:59:49 184

原创 C++实现单例模式

静态成员函数可以在没有创建类的实例的情况下被调用。这对于实现单例模式非常重要,因为单例模式的目标是控制对象的创建,确保整个程序中只创建一个实例。,我们确保了这个类的实例只会被创建一次。静态局部变量的初始化仅在第一次访问函数时进行,之后的访问会返回同一个实例。函数的设计确保了这个类遵循单例模式的要求,即整个程序中只有一个该类的实例,且易于从任何地方访问这个实例。使用引用的原因是我们希望直接返回单例对象本身,而不是它的一个副本。类型的引用,并且这个函数本身也被声明为。,意味着返回的是一个对。

2024-04-04 14:55:50 202

原创 C++的引用

在C++中,引用可以被看作是变量的另一个名字(别名)。引用必须在声明时被初始化,并且一旦被初始化绑定到一个变量,就不能改变绑定到另一个变量。引用在C++中非常有用,特别是在函数参数传递和返回值时,因为它们允许直接操作传递给函数的对象,而不是操作对象的副本。这样可以提高效率并允许函数修改传递给它的参数。

2024-04-04 14:53:49 151 1

空空如也

空空如也

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

TA关注的人

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