首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >【1024程序员节】:希望再无BUG

【1024程序员节】:希望再无BUG

作者头像
爱喝兽奶的熊孩子
发布2024-10-29 08:16:10
发布2024-10-29 08:16:10
13900
代码可运行
举报
文章被收录于专栏:C语言基础C语言基础
运行总次数:0
代码可运行

在这个属于我们的节日——1024程序员节,我想与大家分享我的编程之旅,特别是我学习C++的经历。同时,我也想借此机会,祝愿自己和大家在未来的编程道路上,再也不会遇到BUG。

一、编程之旅的起点

我的编程之旅始于对技术的好奇和对解决问题的渴望。记得第一次接触编程是在大一暑假的课上,那时我们学习了基础的Python。虽然只是简单的语法和逻辑,但我被编程的魅力深深吸引。从那时起,我就知道,我将与代码结下不解之缘。

2023年底中国程序员群体的人数已攀升至2067.21万,增速达到2.5%。而另一些报告则指出,中国程序员总数约为600万至700万不等。这些差异可能源于统计方法和数据来源的不同。但无论如何,中国都是全球程序员数量最多的国家之一。

全球范围内,不同编程语言的程序员数量也存在显著差异。以下是一些当下的编程语言排行榜。

不同编程语言的特点 没有最好的语言,只有最合适的语言,程序员擅长用不同的语言解决不同的问题,以下是一些常见语言的特点:

编程语言

使用人数/活跃开发者数量(估计值)

Python

约1820万开发者(另有说法认为其已成为使用量最大的编程语言)

Java

约2520万活跃开发者(需求量依然强劲,且增长主要来自有经验的开发者)

JavaScript/TypeScript

需求量极大,DevJobsScanner统计显示有91.5万份相关职位需求(2022年1月至2023年5月),是需求量最大的编程语言

C++

TIOBE排行榜中排名第二,社区活跃度和项目运用情况良好

C

曾被誉为“编程语言之母”,但现已跌至TIOBE排行榜第四位

C#

需求量稳定,DevJobsScanner统计显示有37.5万份相关职位需求

Go

约470万开发者,因其简化的并发处理和全面的标准库在后端服务中广泛使用

Rust

用户群在过去两年中几乎翻了一番,到2024年初达到400万开发者,因其性能和内存安全特性受到青睐

PHP

需求量第五大的编程语言,主要用于Web开发

Ruby

排名较稳定,有一定数量的工作岗位需求

二、选择C++的理由

大学时,我选择了计算机科学作为我的专业。在众多编程语言中,我选择了C++作为我的主攻方向。C++以其性能高效、应用广泛而闻名。它既能让我深入理解计算机的工作原理,又能让我在游戏开发、系统编程等领域大展身手。

1. C++学习路线
  • 1. 基础语法: 我首先学习了C++的基本语法,包括变量、数据类型、控制结构等。
  • 2. 面向对象编程: 随后,我深入学习了C++的面向对象特性,如类、继承、多态等。
  • 3. 标准模板库(STL): 我花了大量的时间研究STL,包括容器、迭代器、算法等。
  • 4. 内存管理: C++的内存管理是其强大之处,也是其复杂之处。我学习了如何正确地使用new和delete,以及智能指针的使用。
  • 5. 高级特性: 随着经验的积累,我开始探索C++的高级特性,如模板编程、异常处理、Lambda表达式等。

在学习C++的过程中,我遇到了许多挑战。比如,理解指针和内存管理的概念,掌握复杂的模板编程,以及调试那些难以发现的BUG。但正是这些挑战,让我的技术更加精湛,让我对编程有了更深的理解。

代码语言:javascript
代码运行次数:0
运行
复制
#pragma once
#include<iostream>
#include<algorithm>
using namespace std;

// 搜索二叉树结点定义
template<class K>
struct BSTreeNode
{
	BSTreeNode<K>* _left;
	BSTreeNode<K>* _right;
	K _key;

	// 构造函数
	BSTreeNode(const K& key)
		:_left(nullptr)
		,_right(nullptr)
		,_key(key)
	{}
};


// 简易版搜索二叉树实现    递归版
template<class K>
class BSTree
{
	typedef BSTreeNode<K> Node;
public:
	// 构造函数
	BSTree()
		:_root(nullptr)
	{}

	// 搜索二叉树拷贝构造
	BSTree(const BSTree<K>& t)
	{
		_root = Copy(t._root);
	}

	// 搜索二叉树赋值
	BSTree<K>& operator=(BSTree<K> t)
	{
		swap(_root, t._root);
		return *this;
	}

	// 析构函数
	~BSTree()
	{
		Destroy(_root);
	}

	// 搜索二叉树的插入
	bool insert(const K& key)
	{
		return _insert(_root, key);
	}

	// 搜索二叉树的查找
	bool find(const K& key)
	{
		return _find(_root, key);
	}

	// 搜索二叉树的删除
	bool erase(const K& key)
	{
		return _erase(_root, key);
	}

	// 搜索二叉树中序打印
	void InOrder()
	{
		_InOrder(_root);
		cout << endl;
	}

private:
	// 拷贝构造子函数
	Node* Copy(Node* root)
	{
		if (root == nullptr)
			return nullptr;
		Node* copyroot = new Node(root->_key);
		copyroot->_left = Copy(root->_left);
		copyroot->_right = Copy(root->_right);

		return copyroot;
	}

	// 搜索二叉树析构子函数
	void Destroy(Node*& root)
	{
		if (root == nullptr)
			return;
		Destroy(root->_left);
		Destroy(root->_right);
		delete root;
		root = nullptr;
	}

	// 搜索二叉树删除子函数
	bool _erase(Node*& root, const K& key)
	{
		// 搜索二叉树为空树
		if (root == nullptr)
			return false;

		if (root->_key < key)
		{
			return _erase(root->_right, key);
		}
		else if (root->_key > key)
		{
			return _erase(root->_left, key);
		}
		else
		{
			Node* del = root;
			// 搜索二叉树的左子树为空
			if (root->_left == nullptr)
			{
				root = root->_right;
			}
			// 搜索二叉树的右子树为空
			else if (root->_right == nullptr)
			{
				root = root->_right;
			}
			// 左右子树都不为空
			else
			{
				Node* leftMax = root->_left;
				// 找替换值
				while (leftMax->_right)
				{
					leftMax = leftMax->_right;
				}
				// 交换替换值
				swap(root->_key, leftMax->_key);
				return _erase(root->_left, key);
			}
			delete del;
			return true;
		}
	}

	// 搜索二叉树插入子函数
	bool _insert(Node*& root, const K& key)
	{
		if (root == nullptr)
		{
			// 插入值
			root = new Node(key);
			return true;
		}

		if (root->_key < key)
		{
			return _insert(root->_right, key);
		}
		else if (root->_key > key)
		{
			return _insert(root->_left, key);
		}
		else
		{
			// 找到了相等的值,不能插入
			return false;
		}
	}

	// 搜索二叉树中序打印子函数
	void _InOrder(Node* root)
	{
		if (root == nullptr)  return;
		// 先打印左子树
		_InOrder(root->_left);
		cout << root->_key << " ";
		// 打印右子树
		_InOrder(root->_right);
	}

	// 搜索二叉树查找子函数
	bool _find(Node* root, const K& key)
	{
		// 空树
		if (root == nullptr)  return false;
		// 要找的值大于当前结点的值
		if (root->_key < key)
			return _find(root->_right, key);
		// 要找的值小于当前结点的值
		else if (root->_key > key)
			return _find(root->_left, key);
		else
			return true;
		// 没有找到
		return false;
	}

	Node* _root;
};

在这个特别的日子里,我有一个愿望:愿自己和大家在未来的编程道路上,再也不会遇到BUG。虽然这可能只是一个美好的愿望,但我相信,通过不断的学习和实践,我们可以减少BUG的出现,提高代码的质量和稳定性。

三、结语

编程是一场既充满挑战又充满乐趣的旅程。在这个1024程序员节,让我们为自己选择这条道路而自豪。让我们继续学习,不断进步,用我们的代码创造一个更加美好的世界。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-10-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、编程之旅的起点
  • 二、选择C++的理由
    • 1. C++学习路线
  • 三、结语
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档