哪家企业建设网站好,百度一下搜索引擎,网站中数据库教程,中英企业网站模板大家好呀#xff01;今天来和你们分享一下我的创作历程#x1f601;。 一、机缘 最开始创作呢#xff0c;是因为在学习 C 的 STL 时#xff0c;像 string、list、vector 这些模板可把我折腾得够呛#xff0c;但也让我学到了超多东西#xff01;我就想#xff0c;要是把我…
大家好呀今天来和你们分享一下我的创作历程。 一、机缘 最开始创作呢是因为在学习 C 的 STL 时像 string、list、vector 这些模板可把我折腾得够呛但也让我学到了超多东西我就想要是把我对它们的理解和实践经验写下来既能巩固自己的知识又能帮到其他正在学习的小伙伴多好呀于是我就满怀热情地踏上了创作之路希望能在这个平台上和大家一起进步愉快地交流技术。
二、收获 在创作的过程中真的收获满满我的文章有了不少阅读量每次看到有小伙伴看我的分享心里就特别开心。还有读者给我点赞和评论这些都给了我极大的鼓励让我知道我的努力是有价值的。通过和读者互动我还结识了好多志同道合的朋友我们一起探讨技术难题让我的技术视野变得更开阔啦
多家社区收录文章 获得官方奖励 全站热榜第一 三、日常 现在创作已经成为我生活中不可或缺的一部分啦。坚持每俩天创作一篇虽然平时工作和学习挺忙的但我会合理安排时间利用业余时间来创作。我发现创作和工作学习是相互促进的在创作时我会对知识进行更深入的思考和总结这让我的专业能力不断提升而工作学习中的新收获又为我的创作提供了丰富的素材真是太棒啦
四、成就 在学习 C 的过程中我成功实现了一些 STL 模板的功能哦给大家展示一下部分关键代码并加上注释方便理解。 首先是 MyString 类它类似于 std::string
#include iostream
#include cstringclass 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这里展示节点、迭代器的定义和插入操作
// 链表节点结构体模板存储数据和前后指针
templatetypename T
struct ListNode { T data;ListNodeT* next;ListNodeT* prev;ListNode(const T value) : data(value), next(nullptr), prev(nullptr) {}
};// 链表迭代器模板类用于遍历链表
templatetypename T
class ListIterator {
private:ListNodeT* node;public:// 构造函数初始化迭代器指向的节点ListIterator(ListNodeT* n) : node(n) {} // 重载解引用运算符返回当前节点存储的数据T operator*() { return node-data;}// 前置递增运算符重载将迭代器指向下一个节点ListIteratorT operator() { node node-next;return *this;}// 比较运算符重载判断两个迭代器是否不相等bool operator!(const ListIteratorT other) { return node! other.node;}
};// 自定义链表类模板
templatetypename T
class MyList {
private:ListNodeT* head; // 链表头节点指针ListNodeT* tail; // 链表尾节点指针public:MyList() : head(nullptr), tail(nullptr) {}~MyList() {// 释放链表所有节点的内存while (head! nullptr) { ListNodeT* next head-next;delete head;head next;}}// 在链表尾部插入元素void push_back(const T value) { ListNodeT* newNode new ListNodeT(value);if (tail nullptr) {head tail newNode;} else {newNode-prev tail;tail-next newNode;tail newNode;}}// 返回链表的起始迭代器ListIteratorT begin() { return ListIteratorT(head);}// 返回链表的结束迭代器指向空节点ListIteratorT end() { return ListIteratorT(nullptr);}
};还有 MyVector 类类似 std::vector比如构造函数、扩容机制和元素访问
// 自定义向量类模板
templatetypename 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】