- 博客(47)
- 收藏
- 关注
原创 C语言泛型 _Generic
泛型编程是一种编程范式,它允许程序员在编写代码时使用一些将来才会指定的类型。这些类型在代码实例化时作为参数指明。例如,在 C++ 中,可以通过模板来支持泛型编程。通过使用_Generic关键字,C 语言可以在一定程度上实现泛型编程,使程序更加灵活和通用。然而,需要注意的是,_Generic的使用仅限于编译时类型选择,而且表达式只是简单的宏替换。此外,对于复杂的类型和多种参数组合,还需要进一步考虑如何正确处理不同类型之间的转换。GarenJian。
2024-09-10 22:45:49 1020
原创 4.Rust所有权
这期我们将带来所有权(Ownership)的相关知识,所有权是Rust很重要的一个概念,必须好好掌握哟!一、内存安全对于C/C++程序员来说,可能一直在跟内存安全打交道,这对我们来说也是一个不可避免的问题,我在面试过程中,90%的面试官都对这个问题深入地提了问题。内存泄漏呀、智能指针呀什么的,如果有人感兴趣的话可以专门针对C++中的内存安全问题专门写一期文章,后台留言告诉我哈。对于一些别的语...
2020-04-04 23:53:42 827
原创 C语言可变参数函数和可变参数宏
可变参数函数的定义通常包含一个固定参数列表,后面跟着一个省略号...。省略号表示可以有任意数量的附加参数。// 定义一个可变参数函数return 0;
2024-09-13 13:53:57 510
原创 strncpy陷阱
相比于strcpy来说,strncpy具有更高的安全性,但是同时会带来一个问题,就是c字符串不会自动补’\0’。最近遇到了一个strncpy的bug,他们居然说这不是bug,而我认为这是很严重的bug!当然如果你本身处理的是bit流,则可以不考虑这个因素。在我们对c字符串进行处理的时候,一定要加上’\0’。很显然,这是由于没有添加’\0’。废话不多说,直接上代码!
2024-09-10 22:49:51 188
原创 C++全局变量和静态变量析构函数的执行时机
在C++中,对于局部变量,当局部变量的生命周期结束时,会自动调用析构函数。但是对于全局变量和静态变量来说,其生命周期较长,其析构函数将会在什么时机进行调用呢?让我们来探究一下。我们先看下面的一段程序:#include <iostream>#include <cstdlib>#include <string>class Static {public: Static() { std::cout << "Static
2022-04-25 22:41:57 3448 2
原创 WebAssembly基础
01 探索WebAssembly1.1.1 什么是WebAssembly?现在我们可以做出相当大胆的断言:WebAssembly就 是分布式计算的未来。这是一个非常崇高的目标,如果没有一些证据来支持它就没什么意义了。我们将提供一些证据,但首先让我们深入了解 WebAssembly 本身的一些细节。我们首先需要消除 WebAssembly 只能在 Web 上运行或者它以某种方式设计为仅在 Web 浏览器范围内运行的虚拟机这种既新颖又有些陈旧的思想。我们现在可以说,“WebAssembly 既不是网络也不是
2021-09-27 12:47:31 805
原创 全世界最简单的Rust开发环境配置
全世界最简单的Rust开发环境配置1. 安装vs2017或vs20192. 下载Rustup运行安装Rust3. vscode安装插件rust-analyzer、CodeLLDB、Better TOML、crates4. 测试cargo new test_01通过vscode打开test_01文件夹等待安装rust-analyzer server等组件点击侧边栏Run和Debug,会提示没有配置,然后会提示根据toml文件生成配置文件,选择是一切就绪后,此后运行和调试就更加方便了...
2021-08-02 23:42:45 554
原创 斐波拉契数列完全解析(C++)
斐波拉契数列的定义如下:F(0) = 0, F(1) = 1F(N) = F(N - 1) + F(N - 2), 其中 N > 1.暴力递归int fib(int n){ if (n == 0) return 0; if (n == 1 || n == 2) return 1; return fib(n-1) + fib(n-2);}我们画一个图来演示一下fib(5)的计算过程:可以发现有很多重复计算,所以这种方式效
2021-08-02 23:39:07 999 2
原创 凑零钱问题(C++)
凑零钱问题:给定k种面值的硬币,分别是c1,c2, … , ck,每种硬币的数量无限,请问最少需要多少枚硬币可以凑出总金额total,如果凑不出将返回-1.暴力递归举例:当总金额是23,硬币面值为1,2,5首先最简单的就是当总金额是0时,需要0枚硬币。当我们选择一枚1元硬币时,就等于总金额为22时的最小硬币数加1。int leastCoinNum(std::vector<int>& coins, int n){ if (n == 0) return
2021-08-02 23:36:55 1553
原创 全世界最简单的Rust开发环境配置
1. 安装vs2017或vs20192. 下载Rustup运行安装Rust3. vscode安装插件rust-analyzer、CodeLLDB、Better TOML、crates4. 测试cargo new test_01通过vscode打开test_01文件夹等待安装rust-analyzer server等组件点击侧边栏Run和Debug,会提示没有配置,然后会提示根据toml文件生成配置文件,选择是一切就绪后,此后运行和调试就更加方便了...
2021-06-27 10:18:44 389
原创 1. 什么.Net?什么是C#?
相信对很多人来说.net并不陌生,因为windows系统中经常遇到提示"请安装.net framework 4.0"之类的提示,那么我们接下来接下来介绍一下集中容易混淆的名词。什么是.net?什么是.net?如何你想知道什么是.net的话?我就带你研究!1. 什么是.net framework? 如我们所知,.net framework是与windows操作系统有关的一个东西,而且是微软推出的。 .net framework开发平台包括公共语言运行库(CLR)和基类库(BCL),CLR负责管理
2021-05-11 23:56:36 306
原创 2. C#变量和数据类型
1. 准备开发环境1.1 Visual Studio C#是微软的亲儿子,那么开发工具当然首推宇宙第一好用也是宇宙第一复杂的究极变态牛逼的Visual Studio进行开发。 首先下载Visual Studio并安装,目前版本推荐Visual Studio 2019,不过2022版本即将出预览版随之就是正式版,总之就是推荐最新的。最新版本性能更优,功能更全更方便且bug更少,且据说Visual Studio 2022将是64位版本,使用起来将会更加流畅,不会因为工程较大,因为内存问题卡顿了。
2021-05-11 23:55:12 312
原创 C#深拷贝
深拷贝与浅拷贝是很多语言都有的概念,在C#中也不例外1. 深拷贝与浅拷贝深拷贝与浅拷贝的区别就是在拷贝的时候是否会建立一个新的对象实体还是引用。而比较直观的就是浅拷贝时,修改拷贝对象的值会改变原对象的值,因为他们在内存里仍然是同一块区域,而浅拷贝修改拷贝对象的值并不会影响原对象的值。在Python中有copy和deepcopy方法,在c++中可以通过重载构造函数和等号实现拷贝的实际行为,在Rust可以通过trait实现复制语义和移动语义,当然移动语义和复制语义有别于深拷贝与浅拷贝。那么Rust中如何
2021-03-07 20:18:30 2339 1
原创 C++程序员Linux子系统使用指南
Linux C++程序员当然必不可少的就是Linux环境配置,我们大多数人使用的电脑都是Windows系统,如何在Windows上开发linux程序呢?通常我们可以由很多方式来选择,这里我推荐一种Windows下Linux子系统的方式,非常滴方便!感兴趣的可以尝试一下~1.准备工作首先需要将开发人员模式打开设置->更新和安全->开发者选项->勾选开发人员模式然后在程序...
2020-04-25 01:08:06 306
原创 9.Rust错误处理
错误处理是程序开发中必不可少的一个环节,在Rust中,错误分成两个类别:可恢复错误和不可恢复错误。可恢复错误:比如说未找到文件,Rust中用Result<T,E>来实现不可恢复错误:比如数组访问越界,Rust中用panic!实现1.panic!这个有感叹号,很显然是一个宏,我们来使用一下子。fn main() { panic!("panic here!");}报...
2020-04-22 20:26:58 1696
原创 8.Rust模式解构
模式解构—Pattern Destructure,其对应的就是模式构造,因此模式解构是将原本组合起来的结构分解为单独的、局部的、原始的部分。1.模式解构示例我们之前在学习tuple时,写过类似以下例子:fn main() { let t = (1, 's', "白质".to_string()); let (t_one, t_two, t_tree) = t; prin...
2020-04-16 23:34:01 1000
原创 7.Rust的trait
trait可以暂时先翻译为“特征”,也可以不翻译吧,就叫trait。1.trait的定义和实现//定义traitpub trait GetInfo { fn get_name(&self) -> &String; fn get_index(&self) -> i32;}//定义学生结构体pub struct Student { ...
2020-04-14 00:15:59 697
原创 6.Rust中的泛型
相信很多C++程序员对泛型编程是非常熟悉的,我本来也是觉得不需要再特别介绍泛型这部分,因为其实都大同小异。但是考虑到部分读者可能不太熟悉,所以还是专门用一期来介绍泛型。一、什么是泛型编程C/C++、Rust都是强类型语言,在对数据进行处理时,必须明确数据的数据类型。但是很多时候,比如链表这种数据结构,我们可以是整型数据的链表,也可以是其他类型,我们可能就会写出重复的代码,仅仅是数据类型不同而已...
2020-04-11 20:39:48 1264
原创 5.Rust中常用的复合数据类型
一、数组1.数组创建一段连续空间中,存储了同类型的数据。fn main() { let mut arr1 = [0, 1, 2, 3 ,4 ,5]; let mut arr2 = [1 ; 6]; //创建大小为6,元素都是1的数组 arr1 = arr2; //arr和arr2是同大小和同数据类型,在Rust中是同一类型,因此可以相互赋值 printl...
2020-04-07 22:48:42 515
原创 2.Rust编程初体验
本入门系列教程将不会按照常规的方式进行,本教程主要以代码入手,先敲代码,再讲知识点。所谓,先“知其然”,再“知其所以然”,欢迎共同探讨,多多指正。下面先以两个简单的程序对Rust语言有一个初步的体验。Code 1. Hello Worldfn main(){ println!("Hello, world!");}运行输出:Hello, world!和C++类似,程序的入口需要一个...
2020-04-02 16:36:02 1822
原创 3.Rust通用编程概念
这期我们将会介绍一些通用的编程概念(也就是通常编程语言都有的东西),如数据类型、函数、控制流等一、变量和数据类型1.Rust的关键字首先我们先介绍一下Rust的关键字,在变量命名时以免冲撞~[Keywords Currently in Use]The following keywords currently have the functionality described.as - ...
2020-04-02 16:33:05 1173
原创 零基础C++后台开发学习路线
个人介绍:首先介绍一下自己吧,我是一名非科班硕士,本硕某985,本科对于编程这块的学习很浅显,数据结构都没学过,基本上到了研一才开始认真学习这块知识。这篇文章实际上是我自己入门编程过程的总结,在大学期间对于c++,java等编程语言的学习比较迷茫,也走过一些弯路,比如盲目刷题,明明不懂却靠记住代码去满足自己的收获感,一路走来,踩了很多坑,下面分享一下我自己总结的学习路线,希望能够帮助到大家。本...
2020-03-16 16:48:45 2213 5
原创 1.Rust环境配置和IDE的选择
Rust语言简介:Rust是一门系统编程语言 ,专注于安全,尤其是并发安全,支持函数式和命令式以及泛型等编程范式的多范式语言。Rust在语法上和C++类似,但是设计者想要在保证性能的同时提供更好的内存安全。一、安装Rust通过rustup安装,https://rustup.rs/rustup可以安装Rust相关的一整套工具链,包括编译器、标准库、cargo等,安装较慢的话,可以试试科学上网...
2020-03-15 22:58:29 9764 1
原创 条件变量
条件变量本身不是锁,但是它仍然可以造成线程阻塞,它通常需要与互斥锁进行配合使用。1.linux接口函数#include <pthread.h>//初始化及销毁条件变量int pthread_cond_destroy(pthread_cond_t *cond);int pthread_cond_init(pthread_cond_t *restrict cond, const ...
2019-11-14 00:15:11 184
原创 C++常见面试题及详细解答(C++基础)
1.关于c++内存对齐内存对齐原因:(1). 平台原因(移植原因):不是所有的硬件平台都能访问任意地址上的任意数据的;某些硬件平台只能在某些地址处取某些特定类型的数据,否则抛出硬件异常。(2). 性能原因:数据结构(尤其是栈)应该尽可能地在自然边界上对齐。原因在于,为了访问未对齐的内存,处理器需要作两次内存访问;而对齐的内存访问仅需要一次访问#include <cassert>...
2019-09-08 21:12:10 2328
原创 手撕合集
冒泡void bubbleSort(vector<int>& arr){ int n = arr.size(); while(n != 0) { for(int i = 1; i < n; i++) { if(arr[i] < arr[i - 1]) ...
2019-08-14 00:59:31 403
原创 LeetCode147. 对链表进行插入排序 c++
取巧(作弊)做法:/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */class Solution {public: ...
2019-07-10 13:01:41 145
原创 LeetCode150. 逆波兰表达式求值 c++
根据逆波兰表示法,求表达式的值。有效的运算符包括+,-,*,/。每个运算对象可以是整数,也可以是另一个逆波兰表达式。说明:整数除法只保留整数部分。给定逆波兰表达式总是有效的。换句话说,表达式总会得出有效数值且不存在除数为 0 的情况。示例1:输入: ["2", "1", "+", "3", "*"]输出: 9解释: ((2 + 1) * 3) = 9示例2:...
2019-07-09 15:00:50 318
原创 LeetCode33. 搜索旋转排序数组 c++
假设按照升序排序的数组在预先未知的某个点上进行了旋转。( 例如,数组[0,1,2,4,5,6,7]可能变为[4,5,6,7,0,1,2])。搜索一个给定的目标值,如果数组中存在这个目标值,则返回它的索引,否则返回-1。你可以假设数组中不存在重复的元素。你的算法时间复杂度必须是O(logn) 级别。示例 1:输入: nums = [4,5,6,7,0,1,2]...
2019-07-05 19:50:46 370
原创 LeetCode82. 删除排序链表中的重复元素 II c++
给定一个排序链表,删除所有含有重复数字的节点,只保留原始链表中没有重复出现的数字。示例1:输入: 1->2->3->3->4->4->5输出: 1->2->5示例2:输入: 1->1->1->2->3输出: 2->3来源:力扣(LeetCode)链接:https://leetcode-cn...
2019-07-05 19:40:56 178
原创 LeetCode83. 删除排序链表中的重复元素 c++
/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */class Solution {public: ListNode* d...
2019-07-05 19:18:24 215
原创 LeetCode80. 删除排序数组中的重复项 II c++解法
给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素最多出现两次,返回移除后数组的新长度。不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。示例1:给定 nums = [1,1,1,2,2,3],函数应返回新长度 length = 5, 并且原数组的前五个元素被修改为 1, 1, 2, 2, 3 。你不需要考虑数组中超出新长度...
2019-07-05 19:05:38 212
原创 《王道程序员求职宝典》第一章、数组
第一篇、程序设计基础及数据结构基础一些基本概念:1.c++内置类型: 分为基本类型和复合类型。基本类型包括整数、浮点数及两者的多种变体。复合类型包括数组、字符串、指针、引用、结构体和共用体等2.内存分区 1)堆:由程序员手动分配和释放,完全不同于数据结构中的堆,分配方式类似链表。由malloc或者new来分配,free和delete来释放。若程序员不...
2019-07-01 20:32:04 300
原创 王道程序员求职宝典 pdf
链接:https://pan.baidu.com/s/14Fjt0yYusiPhocfDNoYy8A提取码:2rwl侵删
2019-06-26 11:12:37 4444 9
原创 c++ 一行输入以空格隔开的数字如何存到一个数组中
int value; vector<int> hh; cin >> value; hh.push_back(value); while(cin.get() != '\n') { cin >> value; hh.push_back(value); }应该肯定还有更好的方...
2019-06-14 22:05:45 9963
原创 C++ STL 堆
#include <queue>#include <iostream>#include <vector>#include <algorithm>using namespace std;int main(){ //大根堆 //push,pop,top,empty,size priority_queue<i...
2019-06-05 17:11:51 577
原创 Ubuntu 修改源
#添加阿里源deb http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiversedeb http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiversedeb http://mirrors.ali...
2019-04-19 16:41:34 181
原创 《王道程序员求职宝典》第4章 运算符及其优先级
1.关于赋值语句对于赋值语句=左右两边的变量扮演者两种不同的角色,右边的我们需要的是它的值,而左边的我们需要的是它所代表的存储单元。分别称为右值和左值。左操作数必须是非const的左值。2.值得一提的就是位运算符位运算符是比较值得说一下的。&,按位与,|,按位或,^...
2019-04-10 21:27:15 206
原创 《王道程序员求职宝典》第二章、字符串
pdf地址:https://blog.csdn.net/qq_23905237/article/details/93722388第二章、字符串1.c风格字符串:没啥好说的2.一些标准库提供的字符串处理函数strlen函数:自定义函数实现strlen的功能:#include <iostream>#include <assert.h>#includ...
2019-04-02 21:59:54 489
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人