当前位置: 首页 > news >正文

我的128天创作之路:回顾与展望

大家好呀!今天来和你们分享一下我的创作历程😁。


一、机缘

        最开始创作呢,是因为在学习 C++ 的 STL 时,像 string、list、vector 这些模板可把我折腾得够呛,但也让我学到了超多东西!我就想,要是把我对它们的理解和实践经验写下来,既能巩固自己的知识,又能帮到其他正在学习的小伙伴,多好呀!于是,我就满怀热情地踏上了创作之路,希望能在这个平台上和大家一起进步,愉快地交流技术🤝。

二、收获

        在创作的过程中,真的收获满满!我的文章有了不少阅读量,每次看到有小伙伴看我的分享,心里就特别开心😄。还有读者给我点赞👍和评论,这些都给了我极大的鼓励,让我知道我的努力是有价值的。通过和读者互动,我还结识了好多志同道合的朋友,我们一起探讨技术难题,让我的技术视野变得更开阔啦!

多家社区收录文章 

 

获得官方奖励 

 全站热榜第一

三、日常

        现在,创作已经成为我生活中不可或缺的一部分啦。坚持每俩天创作一篇,虽然平时工作和学习挺忙的,但我会合理安排时间,利用业余时间来创作。我发现创作和工作学习是相互促进的,在创作时,我会对知识进行更深入的思考和总结,这让我的专业能力不断提升;而工作学习中的新收获又为我的创作提供了丰富的素材,真是太棒啦!

四、成就

在学习 C++ 的过程中,我成功实现了一些 STL 模板的功能哦,给大家展示一下部分关键代码,并加上注释方便理解。

首先是 MyString 类,它类似于 std::string

#include <iostream>
#include <cstring>class MyString {
private:char* data;size_t len;public:MyString() : data(nullptr), len(0) {}MyString(const char* str) {len = std::strlen(str);data = new char[len + 1];std::strcpy(data, str);}~MyString() {delete[] data;}size_t length() const {return len;}char& operator[](size_t index) {return data[index];}const char& operator[](size_t index) const {return data[index];}MyString& operator=(const MyString& other) {if (this!= &other) {delete[] data;len = other.len;data = new char[len + 1];std::strcpy(data, other.data);}return *this;}MyString operator+(const MyString& other) const {char* newData = new char[len + other.len + 1];std::strcpy(newData, data);std::strcat(newData, other.data);MyString result(newData);delete[] newData;return result;}
};

接着是 MyList 类,类似 std::list,这里展示节点、迭代器的定义和插入操作:

// 链表节点结构体模板,存储数据和前后指针
template<typename T>
struct ListNode {  T data;ListNode<T>* next;ListNode<T>* prev;ListNode(const T& value) : data(value), next(nullptr), prev(nullptr) {}
};// 链表迭代器模板类,用于遍历链表
template<typename T>
class ListIterator {  
private:ListNode<T>* node;public:// 构造函数,初始化迭代器指向的节点ListIterator(ListNode<T>* n) : node(n) {}  // 重载解引用运算符,返回当前节点存储的数据T& operator*() {  return node->data;}// 前置递增运算符重载,将迭代器指向下一个节点ListIterator<T>& operator++() {  node = node->next;return *this;}// 比较运算符重载,判断两个迭代器是否不相等bool operator!=(const ListIterator<T>& other) {  return node!= other.node;}
};// 自定义链表类模板
template<typename T>
class MyList {  
private:ListNode<T>* head;  // 链表头节点指针ListNode<T>* tail;  // 链表尾节点指针public:MyList() : head(nullptr), tail(nullptr) {}~MyList() {// 释放链表所有节点的内存while (head!= nullptr) {  ListNode<T>* next = head->next;delete head;head = next;}}// 在链表尾部插入元素void push_back(const T& value) {  ListNode<T>* newNode = new ListNode<T>(value);if (tail == nullptr) {head = tail = newNode;} else {newNode->prev = tail;tail->next = newNode;tail = newNode;}}// 返回链表的起始迭代器ListIterator<T> begin() {  return ListIterator<T>(head);}// 返回链表的结束迭代器(指向空节点)ListIterator<T> end() {  return ListIterator<T>(nullptr);}
};

还有 MyVector 类,类似 std::vector,比如构造函数、扩容机制和元素访问:

// 自定义向量类模板
template<typename T>
class MyVector {  
private:T* data;  // 存储元素的数组size_t capacity;  // 向量的容量size_t size;  // 向量中实际元素的个数// 扩容函数,重新分配内存并复制元素void resize(size_t newCapacity) {  T* newData = new T[newCapacity];for (size_t i = 0; i < size; ++i) {newData[i] = data[i];}delete[] data;data = newData;capacity = newCapacity;}public:MyVector() : data(nullptr), capacity(0), size(0) {}// 带初始容量的构造函数MyVector(size_t initialCapacity) : capacity(initialCapacity), size(0) {  data = new T[capacity];}~MyVector() {delete[] data;}// 在向量尾部插入元素,如果容量不足则扩容void push_back(const T& value) {  if (size == capacity) {resize(capacity == 0? 1 : capacity * 2);}data[size++] = value;}// 重载下标运算符,用于访问向量中的元素(非 const 版本)T& operator[](size_t index) {  return data[index];}// 重载下标运算符,用于访问向量中的元素(const 版本)const T& operator[](size_t index) const {  return data[index];}// 返回向量中实际元素的个数size_t length() const {  return size;}
};

这些实现虽然只是基础的框架,但在学习过程中对我理解 STL 的原理帮助很大,也让我的技术水平提升了不少呢!

五、憧憬

        在未来,我希望能在技术领域继续深入学习和实践,把这些实现进一步优化,然后分享给更多的小伙伴。在职业规划上,我想成为一名厉害的软件工程师,用我的技术解决实际问题,为项目出份力💪。我也会坚持创作,不断提高写作能力和技术水平,给读者带来更有价值的内容。我相信只要努力,一定能实现目标的,加油!


欢迎关注,让我们共同进步👉【A charmer】

相关文章:

我的128天创作之路:回顾与展望

大家好呀&#xff01;今天来和你们分享一下我的创作历程&#x1f601;。 一、机缘 最开始创作呢&#xff0c;是因为在学习 C 的 STL 时&#xff0c;像 string、list、vector 这些模板可把我折腾得够呛&#xff0c;但也让我学到了超多东西&#xff01;我就想&#xff0c;要是把我…...

内核配置参数整理

#参考网页 linux5.2 &#xff1c;.config&#xff1e;文件注释 详细解释 CONFIG_ARMy&#xff1a;启用ARM架构支持&#xff0c;这是ARM处理器专用的内核配置选项。 CONFIG_ARM_HAS_SG_CHAINy&#xff1a;启用对散列表&#xff08;scatter-gather&#xff09;链的支持&#xf…...

SpringBoot整合Easy-es

一.什么是Easy-Es Easy-Es&#xff08;简称EE&#xff09;是一款基于ElasticSearch(简称Es)官方提供的RestHighLevelClient打造的ORM开发框架&#xff0c;在 RestHighLevelClient 的基础上,只做增强不做改变&#xff0c;为简化开发、提高效率而生,您如果有用过Mybatis-Plus(简称…...

于交错的路径间:分支结构与逻辑判断的思维协奏

大家好啊&#xff0c;我是小象٩(๑ω๑)۶ 我的博客&#xff1a;Xiao Xiangζั͡ޓއއ 很高兴见到大家&#xff0c;希望能够和大家一起交流学习&#xff0c;共同进步。* 这一节内容很多&#xff0c;文章字数达到了史无前例的一万一&#xff0c;我们要来学习分支与循环结构中…...

Linux之读者写者模型与特殊锁的学习

目录 读者写者模型 特殊锁 悲观锁 自旋锁 在前几期&#xff0c;我们学习了多线程的生产者和消费者模型&#xff0c;生产者和消费者模型中&#xff0c;有三种关系&#xff0c;两个角色&#xff0c;一个场所&#xff0c;那么读者写者模型和生产者消费者模型有什么关联吗&…...

回溯专题 记录

回溯的题目按照这套模板进行&#xff1b; 我感觉整体逻辑还是递归&#xff0c;只不过有了pop_back才是回溯概念&#xff1b; class Solution {public:vector<int> path;vector<vector<int>> ans;void backtracking(int n,int k,int startindex){if(path.…...

使用 Python 实现自动化办公(邮件、Excel)

目录 一、Python 自动化办公的准备工作 1.1 安装必要的库 1.2 设置邮件服务 二、邮件自动化处理 2.1 发送邮件 示例代码 注意事项 2.2 接收和读取邮件 示例代码 三、Excel 自动化处理 3.1 读取和写入 Excel 文件 示例代码 3.2 数据处理和分析 示例代码 四、综合…...

贪心算法笔记

贪心算法笔记 大概内容 贪心就是对于一个问题有很多个步骤,我们在每一个步骤中都选取最优的那一个,最后得出答案。就是在一些函数中可行,但是有些比如二次函数,因为它的转折点不一定最优,就是不可行的。那么如何判断贪心呢?有这么几种 看时间复杂度,一般的就是 O ( n…...

Formality:两种等价状态consistency和equality

相关阅读 Formalityhttps://blog.csdn.net/weixin_45791458/category_12841971.html?spm1001.2014.3001.5482 背景 逻辑锥的等价性检查时&#xff0c;存在两种验证模式&#xff1a;一致(consistency)和等同(equality)&#xff0c;要理解这两点&#xff0c;首先得明白综合工具…...

Java Web开发基础:HTML的深度解析与应用

文章目录 前言&#x1f30d;一.B/S 软件开发架构简述&#x1f30d;二.HTML 介绍❄️2.1 官方文档❄️2.2 网页的组成❄️2.3 HTML 是什么❄️2.4html基本结构 &#x1f30d;三.HTML标签1.html 的标签/元素-说明2. html 标签注意事项和细节3.font 字体标签4.标题标签5.超链接标签…...

第30章 汇编语言--- 性能优化技巧

汇编语言是用于直接编程计算机硬件的低级语言&#xff0c;它几乎是一对一地映射到机器指令。因为汇编代码与特定处理器架构紧密相关&#xff0c;所以在讨论性能优化技巧时&#xff0c;通常需要考虑具体的CPU架构和指令集。 以下是一些通用的汇编语言性能优化技巧&#xff0c;并…...

HTB:Paper[WriteUP]

目录 连接至HTB服务器并启动靶机 信息收集 使用rustscan对靶机TCP端口进行开放扫描 将靶机TCP开放端口号提取并保存 使用nmap对靶机TCP开放端口进行脚本、服务扫描 使用nmap对靶机TCP开放端口进行漏洞、系统扫描 使用nmap对靶机常用UDP端口进行开放扫描 对靶机进行子域…...

数据库中的 DDL、DML 和 DCL

数据库中的 DDL、DML 和 DCL 在数据库的定义与操作中&#xff0c;DDL、DML 和 DCL 是三个核心概念&#xff0c;分别用于不同层面的数据库管理与操作。 1. DDL&#xff08;Data Definition Language&#xff09; - 数据定义语言 定义 DDL 用于定义和管理数据库的结构或模式。…...

OKR 极简史及理解

大家读完觉得有帮助记得点赞和关注&#xff01;&#xff01;&#xff01; 目录 MBO SMART 和 KPI OKR 1. 什么是 OKR&#xff1f; 1.1 Objectives&#xff08;目标&#xff09; 1.2 Key Results&#xff08;关键成果&#xff09; KR 应当是困难的&#xff0c;但并非不可…...

电商项目-基于ElasticSearch实现商品搜索功能(四)

一、 高亮显示 1.1 高亮分析 高亮显示是指根据商品关键字搜索商品的时候&#xff0c;显示的页面对关键字给定了特殊样式&#xff0c;让它显示更加突出&#xff0c;如商品搜索中&#xff0c;关键字变成了红色&#xff0c;其实就是给定了红色样式。 1.2 高亮搜索实现步骤解析 …...

TCP封装数据帧

void *send_data(void *arg) //这是一个发送数据的线程 {int sockfd init_tcp_cli("192.168.0.148",50000) //传ip和port&#xff0c;port 50000是因为大概前五万都被其它服务所占用&#xff0c;50000后是私人ipif(sockfd < 0){return NULL;}unsigned char …...

数据结构与算法之二叉树: LeetCode 515. 在每个树行中找最大值 (Ts版)

在每个树行中找最大值 https://leetcode.cn/problems/find-largest-value-in-each-tree-row/description/ 描述 给定一棵二叉树的根节点 root &#xff0c;请找出该二叉树中每一层的最大值 示例1 输入: root [1,3,2,5,3,null,9] 输出: [1,3,9]示例2 输入: root [1,2,3]…...

百度视频搜索架构演进

导读 随着信息技术的迅猛发展&#xff0c;搜索引擎作为人们获取信息的主要途径&#xff0c;其背后的技术架构也在不断演进。本文详细阐述了近年来视频搜索排序框架的重大变革&#xff0c;特别是在大模型技术需求驱动下&#xff0c;如何从传统的多阶段级联框架逐步演变为更加高…...

构造函数的原型原型链

代码示例 // 定义一个构造函数 Test function Test() {this.name 张三 }; //向构造函数的原型添加一个属性 age18 Test.prototype.age 18;//使用构造函数 Test 来实例化一个新对象 const test new Test();//向 Object.prototype 添加了一个名为 sex 的属性&#xff0c;其值…...

nginx反向代理及负载均衡

华子目录 nginx反向代理功能http反向代理反向代理配置参数proxy_pass的注意事项案例&#xff1a;反向代理单台后端服务器案例&#xff1a;反向代理实现动静分离案例&#xff1a;反向代理的缓存功能非缓存场景下测压准备缓存缓存场景下测压验证缓存文件 反向代理负载均衡&#x…...

19c补丁后oracle属主变化,导致不能识别磁盘组

补丁后服务器重启&#xff0c;数据库再次无法启动 ORA01017: invalid username/password; logon denied Oracle 19c 在打上 19.23 或以上补丁版本后&#xff0c;存在与用户组权限相关的问题。具体表现为&#xff0c;Oracle 实例的运行用户&#xff08;oracle&#xff09;和集…...

React Native 导航系统实战(React Navigation)

导航系统实战&#xff08;React Navigation&#xff09; React Navigation 是 React Native 应用中最常用的导航库之一&#xff0c;它提供了多种导航模式&#xff0c;如堆栈导航&#xff08;Stack Navigator&#xff09;、标签导航&#xff08;Tab Navigator&#xff09;和抽屉…...

定时器任务——若依源码分析

分析util包下面的工具类schedule utils&#xff1a; ScheduleUtils 是若依中用于与 Quartz 框架交互的工具类&#xff0c;封装了定时任务的 创建、更新、暂停、删除等核心逻辑。 createScheduleJob createScheduleJob 用于将任务注册到 Quartz&#xff0c;先构建任务的 JobD…...

Mac软件卸载指南,简单易懂!

刚和Adobe分手&#xff0c;它却总在Library里给你写"回忆录"&#xff1f;卸载的Final Cut Pro像电子幽灵般阴魂不散&#xff1f;总是会有残留文件&#xff0c;别慌&#xff01;这份Mac软件卸载指南&#xff0c;将用最硬核的方式教你"数字分手术"&#xff0…...

OpenLayers 分屏对比(地图联动)

注&#xff1a;当前使用的是 ol 5.3.0 版本&#xff0c;天地图使用的key请到天地图官网申请&#xff0c;并替换为自己的key 地图分屏对比在WebGIS开发中是很常见的功能&#xff0c;和卷帘图层不一样的是&#xff0c;分屏对比是在各个地图中添加相同或者不同的图层进行对比查看。…...

从 GreenPlum 到镜舟数据库:杭银消费金融湖仓一体转型实践

作者&#xff1a;吴岐诗&#xff0c;杭银消费金融大数据应用开发工程师 本文整理自杭银消费金融大数据应用开发工程师在StarRocks Summit Asia 2024的分享 引言&#xff1a;融合数据湖与数仓的创新之路 在数字金融时代&#xff0c;数据已成为金融机构的核心竞争力。杭银消费金…...

人工智能--安全大模型训练计划:基于Fine-tuning + LLM Agent

安全大模型训练计划&#xff1a;基于Fine-tuning LLM Agent 1. 构建高质量安全数据集 目标&#xff1a;为安全大模型创建高质量、去偏、符合伦理的训练数据集&#xff0c;涵盖安全相关任务&#xff08;如有害内容检测、隐私保护、道德推理等&#xff09;。 1.1 数据收集 描…...

【C++】纯虚函数类外可以写实现吗?

1. 答案 先说答案&#xff0c;可以。 2.代码测试 .h头文件 #include <iostream> #include <string>// 抽象基类 class AbstractBase { public:AbstractBase() default;virtual ~AbstractBase() default; // 默认析构函数public:virtual int PureVirtualFunct…...

Linux部署私有文件管理系统MinIO

最近需要用到一个文件管理服务&#xff0c;但是又不想花钱&#xff0c;所以就想着自己搭建一个&#xff0c;刚好我们用的一个开源框架已经集成了MinIO&#xff0c;所以就选了这个 我这边对文件服务性能要求不是太高&#xff0c;单机版就可以 安装非常简单&#xff0c;几个命令就…...

【堆垛策略】设计方法

堆垛策略的设计是积木堆叠系统的核心&#xff0c;直接影响堆叠的稳定性、效率和容错能力。以下是分层次的堆垛策略设计方法&#xff0c;涵盖基础规则、优化算法和容错机制&#xff1a; 1. 基础堆垛规则 (1) 物理稳定性优先 重心原则&#xff1a; 大尺寸/重量积木在下&#xf…...