自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 STL利器:upper_bound与lower_bound的使用

upper_bound 用于在已排序的序列中查找第一个大于给定值的元素位置。4)边界检查:记得检查返回值是否等于 end(),表示没找到。3)时间复杂度:O(log n) 的二分查找,很高效。1)upper_bound只能在已排序的序列上工作。2)返回值是迭代器:需要转换为索引或直接使用。

2025-11-30 15:35:07 155

原创 C++:关于指针数组与数组指针的若干问题

摘要:本文讲解了指针数组和数组指针的区别。指针数组是一个存储指针的数组,而数组指针是指向数组的指针。重点分析了int(arr)[10]这种数组指针的语法含义,它表示指向包含10个int元素的数组的指针。通过代码示例演示了数组指针如何操作二维数组,可以指向某一行并访问元素。最后通过一道面试题解析了数组指针的常见用法,说明p[0][0]、(p[0]+1)和(*p)[2]三种访问方式的异同。(149字)

2025-11-07 11:11:34 148

原创 git常用命令

【代码】git常用命令。

2025-10-09 15:49:01 292

原创 C++11之move移动语义

这篇文章用通俗易懂的方式解释了C++中的move语义。通过"借书"的比喻,说明了move操作通过所有权转移避免不必要的拷贝,提升性能。文章给出了move的四个典型应用场景:1)在容器操作中高效移动元素;2)拷贝对象时避免深复制;3)实现高性能的swap函数;4)在构造函数初始化列表中使用。每个场景都配有代码示例和输出结果,直观展示了move的效果。需要注意的是,move后的原始对象处于有效但空的状态,不应再使用。move语义特别适合管理大量资源的对象,如字符串、向量等。

2025-09-20 20:24:07 384

原创 C++函数对象、仿函数

摘要:函数对象(仿函数)是通过重载()操作符使类对象能像函数一样调用的技术。文章演示了三种用法:1)基本函数调用功能;2)利用成员变量记录调用状态;3)作为参数传递。通过MyAdd和MyPrint类的示例,展示了函数对象既能执行运算又能维护状态的特点,体现了其比普通函数更灵活的优势。

2025-09-17 17:24:45 220

原创 C++网络通信:基于IO多路复用实现的TCP并发服务器

本文介绍了三种IO多路复用技术:select、poll和epoll。select通过监控文件描述符集合实现并发,但效率较低;poll采用结构体数组管理文件描述符,提高了可扩展性;epoll作为升级版,利用红黑树实现高效事件管理,支持水平触发和边沿触发两种模式。文章详细讲解了各API的使用方法,并提供了TCP并发服务器的实现案例,展示了如何利用这些技术处理多个客户端连接。其中epoll因其高效性成为嵌入式等领域的主流选择,相比select和poll具有明显性能优势。

2025-08-18 23:21:18 377

原创 C++网络通信:基于多进程、多线程实现的TCP并发服务器

对于tcp通信方式而言,目前的通信方式,只能实现一个服务器端对应一个客户端,不能实现一个服务器对应多个客户端,为了完成该操作,我们需要引入并发操作。

2025-08-13 11:52:59 272

原创 C++网络通信:基于UDP面向无连接的网络通信方式

摘要:本文介绍了UDP通信方式的特点及其与TCP的区别,重点讲解了UDP数据收发的核心函数recvfrom和sendto的使用方法。UDP作为无连接的传输协议,虽然传输效率高但不可靠,可能出现数据丢失、重复等问题。文章详细说明了这两个函数的参数及返回值,并提供了UDP服务端和客户端的完整代码实现示例,其中客户端绑定IP和端口为可选操作,这决定了是否允许多客户端同时通信。代码演示了UDP通信的基本流程:创建套接字、绑定地址、收发数据和关闭连接。

2025-08-11 22:36:56 466

原创 C++网络通信:基于TCP面向连接的网络通信方式

本文介绍了客户端-服务器模型的通信原理及实现方法。服务器端流程包括:1)使用socket()创建套接字;2)bind()绑定IP和端口;3)listen()启动监听;4)accept()等待客户端连接;5)使用recv()/send()收发数据;6)close()关闭连接。客户端流程包括:1)创建套接字;2)connect()连接服务器;3)数据收发;4)关闭连接。文中详细说明了各系统调用的参数和功能,并提供了完整的服务器和客户端代码示例,展示了TCP通信的具体实现过程。

2025-08-10 20:01:10 404

原创 C++11 多线程的实现

本文介绍了C++多线程编程的核心操作:1.线程创建与回收(四种线程体形式、join/detach方法);2.互斥锁实现线程同步(lock/unlock操作);3.条件变量实现生产者-消费者模型(wait/notify机制)。通过两个实例展示了实际应用:文件分段拷贝和ABC有序打印,其中ABC打印案例使用条件变量精确控制线程执行顺序。文章包含完整代码示例,演示了多线程编程中资源竞争、线程同步等关键问题的解决方案。

2025-08-05 18:17:17 214

原创 python 学习笔记之 dir 、help函数

Python内置函数dir()和help()使用指南 dir()函数用于查看对象的有效属性列表,包括方法和变量等,语法为dir([object])。help()函数则提供对象的详细帮助文档,显示docstring内容,语法为help([object])。例如,使用help(list.append)可以查看列表append方法的详细说明,而导入math模块后执行help(math)则会显示该模块的所有函数和说明文档。这两个函数是Python交互式环境和调试时的重要工具。

2025-08-04 21:41:22 227

原创 python 创建conda虚拟环境

本文介绍了conda虚拟环境的基本操作:1)查看已有环境(conda env list);2)创建新环境(conda create -n 环境名 python=版本);3)激活/退出环境(conda activate/deactivate);4)安装依赖包(conda install);5)删除环境(conda remove -n 环境名 --all);6)查看环境中的包(conda list)。这些命令可有效管理Python项目的独立环境。

2025-08-04 00:30:11 329

原创 C++之标准IO

【代码】C++之标准IO。

2025-07-16 23:06:28 106

原创 解决Xshell、VS Code远程登录不上CentOS的问题:Could not connect to 192.168.0.114 (port 22): Connection failed.

问题:连接时Xshell终端出现 Could not connect to '192.168.0.114' (port 22): Connection failed.

2025-07-16 09:44:53 340

原创 CMake项目实战案例

该程序实现了一个简单的数值交换功能。代码结构包含头文件swap.h声明MySwap类,swap.cpp实现类方法,main.cpp测试功能。MySwap类通过run()方法交换两个私有成员变量的值,printInfo()输出当前值。CMakeLists.txt配置了编译选项,生成可执行文件swap_exe。运行结果显示交换前输出3和4,交换后输出4和3,成功实现了两个整数的交换功能。

2025-07-16 00:12:34 129

原创 关于C++11的 for each语句的补充说明

推荐作为默认选择(安全且高效),现代C++推荐写法。直接访问内存,不会发生拷贝结构体较大时优先使用(避免拷贝开销)需要修改容器元素(如更新标志位、重置状态)结构体非常小(如小于16字节)时可用。需要独立修改临时副本且不影响原数据。不推荐用于大结构体或频繁遍历场景。这是只读操作(如打印、计算值)需要避免拷贝的大结构体操作。

2025-07-11 17:25:10 129

原创 C++11常用新特性

C++11列表初始化扩展了初始化列表的使用范围,支持内置类型、用户自定义类型和STL容器。示例展示了多种初始化方式:int变量可带或不带"=",数组支持传统和简化写法,vector和map可直接用列表初始化,自定义类也支持构造参数列表初始化。这种统一语法简化了代码,提高了初始化灵活性。

2025-07-08 15:19:52 137

原创 C++ 字符串常用操作

本文介绍了C++ string类的三个常用字符串操作:1. find()函数用于查找子串位置,返回起始索引或-1;2. replace()函数可在指定位置替换字符串;3. substr()函数用于提取子字符串,从指定位置开始截取指定长度,时间复杂度为O(n)。示例代码演示了如何从"Hello,World!"中提取"World!"和"Hello"子串。这些操作在处理字符串时非常实用。

2025-07-08 10:09:14 127

原创 C++ 基于字符串的IO操作、字符串转换

C++中的stringstream类(位于<sstream>头文件)提供了字符串与流的结合操作功能,主要包括三种类型:stringstream(读写)、istringstream(读)和ostringstream(写)。其核心功能包括:1) 字符串拼接和格式化输出;2) 字符串分割(如CSV数据处理);3) 类型转换(字符串与数值互转)。常用成员函数str()用于获取/设置内容,clear()用于重置状态。虽然C++11引入了更便捷的to_string和stoxx系列函数,但stringstre

2025-07-07 10:27:58 238

原创 C++ 文件的定位和大小

C++文件定位操作摘要: C++通过seekg()和seekp()分别定位文件的读/写位置,参数包括偏移量和基准位置(beg/cur/end)。文件大小可通过指针定位和位置查询组合实现:先将指针移至文件末尾(seekg(0,ios::end)),再用tellg()获取字节数。示例代码演示了打开文件后,通过比较起始和结束位置差值计算文件大小的完整流程。这些函数需包含<fstream>头文件,适用于二进制文件操作。

2025-07-05 17:02:11 211

原创 C++ 文件的输入与输出(二进制模式)

不过此代码会出现运行时报错,问题尚未解决。

2025-07-05 10:57:29 322

原创 C++ 文件的输入与输出(文本模式)

C++文件读写操作主要包含4个步骤:1)包含fstream头文件并创建流对象;2)使用open()打开文件,可指定打开模式;3)通过<<和>>运算符进行读写,或使用get()逐字符读取;4)调用close()关闭文件。写入时默认覆盖原内容,添加ios::app参数可追加写入。读取时可逐字符处理或使用getline()逐行读取。注意每次操作后都应关闭文件并检查打开是否成功。示例代码演示了基本的文本文件写入和读取操作。

2025-07-04 23:40:30 230

原创 C++易错易混语法点

摘要:本文介绍了C++中vector和string容器的两个重要特性。vector的resize(n,val)函数可调整容器大小为n,新增元素初始化为val,不影响原有元素值。string的size()返回无符号数,与有符号数比较时会发生隐式类型转换,如-1会被转换为大数导致-1>=s.size()为真。文中通过代码示例演示了这两种情况的实际运行效果。

2025-06-07 00:08:05 130

原创 基于OpenCV的全景图制作

特征的配准方法,制作全景图。库相应函数,实现全景图的制作。幅及以上),运用基于。

2025-05-27 20:27:34 224

原创 linux常用命令

【代码】linux常用命令。

2025-05-05 20:10:15 124

原创 C++函数高阶:函数重载和作用域

我们知道,函数是有作用域的,就像变量,有局部变量和全局变量一样。如果一个变量在外部做了声明,在内部也做了声明,当我们在内部访问这个变量时,内部声明的变量会覆盖掉外部的变量。

2025-04-24 11:49:29 196

原创 指针——const修饰指针

指针指向的地址不能修改,指针指向的值可以修改;指针指向的值不能修改,指针的指向可以修改;指针指向的地址和指针指向的值均不能修改。① const修饰指针:常量指针。② const修饰常量:指针常量。③ const修饰指针和常量。

2025-04-15 20:38:54 201

原创 图的存储之邻接表的链式前向星实现

数据结构中,我们存储图结构主要有5种方式:邻接矩阵、邻接表、十字链表、邻接多重表、边集数组。在算法竞赛中,我们用比较多是前两种,但由于邻接矩阵操作起来的时间复杂度和空间复杂度较高(如果存储稀疏图会极大浪费空间),因此我们更多采用邻接表进行存储,为了避免复杂的指针操作,在这里我们使用链式前向星进行存储。

2025-04-13 20:34:15 161

原创 C风格的scanf、printf输入输出说明

printf 的格式说明符提供了灵活的输出控制,合理使用修饰符可以实现对齐、补零、精度调节等功能。

2025-03-30 20:43:44 389

原创 并查集 QuickUnion (C++ 实现)

【代码】并查集 QuickUnion (C++ 实现)

2025-03-30 18:26:35 203

原创 平衡二叉树AVL (用面向对象编程C++实现)

【代码】平衡二叉树AVL (用面向对象编程C++实现)

2025-03-08 21:16:56 183

原创 指针作为函数参数,函数可以修改指针的所指向的值,但是无法修改指针的指向

原因:在C++中,函数参数默认采用值传递方式。当将指针a传递给函数f(int* p)时,传递的是指针的副本而非指针本身。函数会创建一个副本p,此时将这个副本指向100所在的地址,不会影响外部的原始指针a。解决方法:采用 &引用传递的方式,或者使用int** 作为函数参数传入。

2025-03-03 23:49:12 225

原创 嵌套类、局部类

Node 类是 Container 类的嵌套类,用于实现链表节点。外部代码无法直接访问 Node 类,只能通过 Container 类提供的公共接口来操作链表,从而实现了类型封装。在 C++ 中,嵌套类是指在一个类的内部定义的另一个类,又叫内部类。外围类可以访问嵌套类的公有成员,但是嵌套类不能访问外围类的公有成员。类也可以定义在函数体内,这样的类被称为局部类。具体跟上面类似,不过多赘述。

2025-02-24 09:30:12 162

原创 快速幂的计算

所以a*b=(i*c+x)*(j*c+y) = i*j*c*c+i*y*c+j*x*c+x*y=(i*j*c+i*y+j*x)*c+x*y。10的二进制为1010, 10=(2^3)*1+(2^2)*0+(2^1)*1+(2^0)*0。此时需要用到一个性质: (a*b)%c=( (a%c)*(b%c) ) %c。设 k=i*j*c+i*y+j*x ,则a*b=k*c+x*y。因此 (a^n)%c=( (a%c)^n ) %c。因为5^8=*(5^2)*(5^2)*(5^2)因此可以以此简化计算。

2025-02-13 22:11:04 285

原创 欧拉筛法(线性筛)

当 i%prime[j]==0 ,说明i是prime[j]的倍数,即i=k*prime[j],(k=1,2,3,……所以x=k*prime[j]*prime[j+1],此时不能保证x被最小质因数筛掉。因为根据prime数组的有序性,恒有prime[j]<prime[j+1]x=i*prime[j+1] (我们假设此时x<n)那么就会将x 筛掉,由于i=k*prime[j]如果此时不break,那么会执行j++所以需要进行break,才能满足条件。

2025-02-12 21:54:41 322

空空如也

空空如也

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

TA关注的人

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