- 博客(199)
- 收藏
- 关注
原创 【编程技巧】使用hash保存异位字符串
为了保存独一无二的字符串组成时,一般可以联想到使用数组保存字符数量,但是怎么保存到unordered_set或者unordered_map中呢?为了达到初始目标,可以使用string或者整型来达到目标。上面代码的问题其实是没有对应的hash方法。
2025-02-22 14:24:24
150
原创 [C/C++] 运算符重载
在C++中,为自定义迭代器重载全等运算符(operator==)是一种常见的做法,它允许程序员在比较两个迭代器时获得有意义的结果。
2025-01-16 15:38:49
394
原创 【C/C++】typename
在C++中,using声明是一种简洁的方式来定义类型的别名。/*- `using`:这是定义类型别名的关键字。- `BufferType`:这是新定义的别名,之后可以在代码中用这个名称来引用该类型。- `=`:用于指定别名指向的实际类型。- `typename`:这是一个关键字,用于指示后面的`HeaderType::BufferType`是一个类型名称。
2025-01-16 15:26:48
190
原创 【C/C++】Lambda 用法
这种写法利用了C++11及以后版本中lambda表达式的功能,特别是完美转发和自身引用的特性,使得递归lambda表达式成为可能。然而,需要注意的是,虽然这种写法很强大,但也可能使代码难以理解和维护,特别是对于那些不熟悉lambda表达式和递归技巧的读者。因此,在使用这种技术时,应该权衡其带来的便利性和代码的可读性。这个lambda表达式使用了递归和引用捕获自身的技巧,来实现深度优先搜索(Depth First Search, DFS)或其他递归算法。
2024-11-18 21:14:54
1145
原创 [C++] 惯用法
尽管这种“拷贝/交换”策略在概念上清晰且易于理解,但如前所述,在拷贝赋值运算符中实现时,其性能可能并非最优。为了提升性能,我们通常会为移动赋值运算符采用类似的策略,但利用移动构造函数而非拷贝构造函数来创建临时对象。不过,需要注意的是,这里的代码实际上更适合作为移动赋值运算符(move assignment operator)的实现基础,而非拷贝赋值运算符。如果我们的目标是优化性能,特别是在处理大型数据结构时,那么利用移动语义而非拷贝语义将更为高效。的临时对象,而该对象是通过。另外,值得注意的是,如果您的。
2024-11-17 18:56:35
395
原创 [C/C++] move示例
在移动操作后,源对象通常仍然可以使用,但前提是类的设计者已经确保了移动后对象的状态是安全的。这通常意味着类需要实现一个有效的移动构造函数和/或移动赋值运算符,并确保移动后对象的状态是已知的、可预测的,或者至少是安全的(例如,通过将指针设置为。操作后的对象是否还可以使用取决于类的实现和移动操作后的状态。在大多数情况下,如果类的设计者已经妥善处理了移动操作后的状态,那么对象仍然是可用的,但可能需要重新初始化或检查其状态。这是因为移动操作后的对象状态是未定义的,除非类的文档明确指出了移动后的状态。
2024-11-17 18:53:18
1071
原创 [C/C++] 定位新表达式 placement new
定位新表达式通常用于需要精确控制对象内存布局的场景,例如在嵌入式系统、性能优化或实现自定义内存分配器的上下文中。然而,由于其复杂性和容易出错的特点,它并不常用在普通的C++编程中。此外,使用定位新表达式时,程序员负责确保内存的正确分配和释放。特别是,当对象被销毁时,不会自动释放其占用的内存,因为内存是在定位新表达式之外分配的。关键字时,它会在堆上动态分配内存,并调用相应的构造函数来初始化对象。然而,定位新表达式允许我们在已经分配好的内存位置上构造对象。展示了一种特殊的内存分配和对象构造方式,这被称为。
2024-11-17 18:42:19
379
原创 【Algorithm】如何刷题
算法主要是思维/思路,一般来说我们需要建立:从整体到细节,自顶而下,从抽象到具体的框架思维。对于算法来说,无外乎两大类:上层建筑:各式各样的数据结构结构基础:数组和链表。
2024-10-15 01:05:03
431
原创 【摘抄】软件工程师认知
关于软件工程师的认知摘抄1编程没想象中那样高大上:写代码无非就是调用API,做业务无非也就是抄些CRUD的现成代码【原文作者的水平的确有限】提升能力不是单纯考学,而是得靠解决实际问题。比如在做项目时,提升技能的最好方式是解决值钱(比如分布式高并发或devops等)的问题单纯做CRUD业务,其实顶了天也只能算个初级开发。指导其实在做项目的过程中,写代码的技能相对来说是比较不值钱的。懂得从更全面的视角看问题,才是成功。知道在自己领域,哪些技术比较值钱,同时更知道,如何在面试中证明自己的技能,知道该
2024-09-20 23:25:46
221
原创 【软件工程】CI_CD
CI/CD1 主流技术阶段常用工具代码管理GitSVN单元测试JUnit(Java)PyTest(python)aJest(JavaScript/Node.js)NUnit(C#)构建打包Maven(Java)Gradle(Java/Kotlin)npm/Yarn(JavaScript/Node.js)Docker(容器化)自动发布JenkinsGitLab CI/CDCircleCITravis CI部署环境Kubernetes(k8s)Docke
2024-09-10 00:36:56
537
原创 【C/C++】论数据结构的上层建筑和底层基础
多种多样的数据结构都脱离不了底层基本存储结构,即数组和链表。数据结构其实就是基于数组或链表,增加不同的API接口,实现不同的特性。连续存储 -> 内存空间须一次性分配足,扩容时需要重新申请,再复制,增删操作复杂度O(N)元素不连续,依赖指针指向下一节点 -> 无扩容问题,耗费内存空间更多。非连续存储 -> 增删操作复杂度O(1),但是无法随机访问。这两种数据结构既可以使用数组实现,又可以用链表实现。延申:二叉搜索树/AVL树/红黑树/区间树/B树/…紧凑连续存储 -> 随机访问,快速定位,节约空间。
2024-09-05 00:11:38
497
原创 【C/C++】类型转换
是 C++ 中的一个强制类型转换运算符,用于处理无关类型之间的转换,它会产生一个新的值,这个值会有与原始参数(expression)完全相同的比特位。然而,这种转换并不保证转换后的类型在逻辑上或语义上是合理的,也不保证转换后的值在运行时是安全的。与编译平台的关系主要体现在其操作的不确定性和平台依赖性上。为了编写可移植且安全的代码,应谨慎使用。与编译平台的关系主要体现在其操作的不确定性和平台依赖性上。支持继承体系中向上转换。
2024-08-27 23:13:37
398
原创 【C/C++】内存相关
起源:ptmalloc起源于Doug Lea的malloc实现,并由Wolfram Gloger进行改进,以支持多线程。目标:ptmalloc的主要目标是为多线程应用程序提供高效的内存分配和释放。名称含义:“pt”代表“pthreads”,指的是POSIX线程库,表明其支持多线程的特性。ptmalloc作为glibc中的默认内存分配器,在Linux系统中扮演着重要角色。它通过一系列机制来提高内存分配和释放的效率,并支持多线程应用程序。
2024-07-11 23:10:21
1006
1
原创 【网络协议】PIM
PIM协议不依赖于特定的单播路由协议,如RIP(路由信息协议)或OSPF(开放最短路径优先),而是可以直接利用这些单播路由协议建立的路由表进行组播路由的计算和转发。这使得PIM协议能够在不同的网络环境中灵活应用,并减少了对特定路由协议的依赖。PIM协议作为一种协议无关组播协议,在组播路由领域具有重要地位。其灵活性和可扩展性使得PIM协议能够适应不同规模和复杂度的网络环境需求。同时,PIM协议的低开销特性也降低了网络运营成本。
2024-07-08 22:43:38
901
1
原创 【网络协议】ISIS
IS-IS(Intermediate System to Intermediate System,中间系统到中间系统)协议是一种用于在自治系统(AS)内部进行路由选择的链路状态路由协议。它最初是为OSI(开放系统互连)网络设计的,但后来被扩展以支持IPv4和IPv6网络。
2024-07-08 22:42:03
681
原创 【网络协议】OSPF
OSPF(Open Shortest Path First)协议是一种广泛使用的动态路由协议,它属于链路状态路由协议,在单一自治系统(AS)内部工作。
2024-07-08 22:40:31
518
原创 【计算机】同步/异步
在计算机科学和编程中,“同步”(Synchronization)是一种机制,用于协调不同进程或线程之间的操作,以避免竞态条件(race conditions)、死锁(deadlocks)和其他并发问题。同步确保了在多线程或多进程环境中,对共享资源的访问是有序的、互斥的,从而保证了数据的一致性和完整性。然而,过度使用同步机制也可能导致性能问题,如增加线程间的等待时间和降低系统的吞吐量。:互斥锁是最基本的同步机制之一,用于保护共享资源,防止多个线程同时访问。:屏障是一种同步机制,用于在多个线程之间设置同步点。
2024-07-07 15:56:10
454
1
原创 C++ 杂七杂八
new -> 失败,bad_alloc异常malloc -> 失败,返回nullptroperator new/delete 可重载, c++运算符malloc/free 不允许重载,标准库函数递增/减前置 -> 引用后置 -> 对象(值)define vs typedef无循环/无条件判断/函数体小全特化 template<>声明
2024-07-01 23:13:23
290
原创 Leetcode 股票买卖
启发思路:最后一天发生了什么?从第0天到第5天结束时的利润 = 从第0天到第4天结束时的利润 + 第5天的利润(第5天的利润:0/-4/4)关键词:天数 / 是否持有股票分解子问题:到第i天结束,持有/未持有股票的最大利润下一子问题:到第i-1天结束时,持有/未持有股票的最大利润状态转移图fill:#333;color:#333;color:#333;fill:none;买入卖出未持有持有定义dfs(i, 0)表示到第i天结束,未持有股票的最大利润。
2024-06-26 13:06:43
534
原创 CMake使用指导
总结来说,控制CMake编译顺序的关键在于正确地声明项目中的依赖关系,并编写清晰的CMakeLists.txt文件。在CMake中控制编译顺序主要依赖于CMake对项目依赖关系的理解和处理。等命令,并结合CMake的自动处理机制,可以确保项目按照正确的顺序进行编译。
2024-06-25 13:39:53
750
原创 软开面试介绍模板
基本信息姓名教育背景(学校、专业、毕业时间)工作经验(如有)技能与专长编程语言(如Java、Python、C++等)的掌握程度框架和库(如Spring Boot、Django、React等)的使用经验版本控制工具(如Git)的熟练使用数据库知识(如MySQL、PostgreSQL、MongoDB等)自动化测试和调试技能操作系统和服务器管理(如Linux、Windows Server)其他相关技术或工具(如Docker、Kubernetes、AWS等)项目经验。
2024-06-25 13:33:17
535
原创 【C++】future/promise
需要从线程中返回异步任务结果情形时,c++11之前:使用指针在线程间共享数据。传递一个指针到新的线程中,该线程在其中设置数据,直到主线程继续等待使用条件变量。当新线程设置数据并通知条件变量时,主线程将唤醒并从指针处获取数据;C++11提供future类模板,future对象提供访问异步操作结果的机制。分类唯一期望(unique futures, std::future)实例只能与一个指定事件相关联;
2024-06-24 13:46:17
284
空空如也
C++开发过程中可能遇到的问题
2024-06-17
TA创建的收藏夹 TA关注的收藏夹
TA关注的人