Cpp from 0 to 1

C++基础入门 C++ 初识 Hello World #include<iostream> using namespace std; int main() { cout << "Hello world" << endl; system("pause"); return 0; } 注释 在代码中加一些说明和解释,方便程序员阅读。编译器在编译代码时,会忽略注释的内容。 // 描述信息 :单行注释,放在一行代码的上方或者一条语句的末尾,对该行代码说明 /* 描述信息 */:多行注释,放在一段代码的上方,对该段代码做整体说明 变量 给一段指定内存空间起名,方便操作这段内存。创建变量时,最好初始化。 ...

March 28, 2025 · 16 min · biglonglong

Cpp CheatSheet

常用头 头文件 标准c头文件 说明 标准c头文件 说明 标准c头文件 说明 assert.h 断言相关 ctype.h 字符类型判断 errno.h 标准错误机制 float.h 浮点限制 limits.h 整形限制 locale.h 本地化接口 math.h/cmath 数学函数 setjmp.h 非本地跳转 signal.h 信号相关 stdarg.h 可变参数处理 stddef.h 宏和类型定义 stdio.h/cstdlib 标准I/O stdlib.h 标准工具库 string.h/cstring 字符串和内存处理 time.h 时间相关 cstdio c标准IO using namespace std; STL头文件 说明 STL头文件 说明 STL头文件 说明 algorithm 通用算法 deque 双端队列 vector 向量 iterator 迭代器 stack 栈 map 图(键值对) list 列表 string 字符串 set 集合 queue 队列 bitset bit类 numeric 数值算法 iostream C++标准IO bitset C++标准位序列 宏定义 ...

July 11, 2024 · 13 min · biglonglong

Cpp LeetCode

模拟 排列的特性 - 下一个排列 排序 bubble sort //逐个冒出当前最大值 template <class T> void bubble_sort(T arr[],int len){ for(int i=0;i<len-1;i++){ for(int j=0;j<len-i-1;j++) if(arr[j]>arr[j+1]) swap(arr[j],arr[j+1]); } } //设置flag,如果存在一轮冒泡没有进行交换,则排序完成 selection sort //从序列中选出该位置上应该出现的元素 template <class T> void selection_sort(T arr[],int len){ for(int i=0;i<len-1;i++){ int index=i; for(int j=i+1;j<len;j++){ if(arr[j]<arr[index]){ index=j; } } swap(arr[i],arr[index]); } direct_insert_sort //向前遍历有序序列,寻找当前元素的合适位置插入 template <class T> void direct_insertion_sort(T arr[],int len){ for(int i=1;i<len;i++){ T key=arr[i]; int j=i; while(j-1>=0&&arr[j-1]>key){ arr[j]=arr[j-1]; j--; } arr[j]=key; }//位置j的元素要么是j-1(挪),要么是key(插) } //二分法加快插入位置的搜索 shell _sort //宏观性优先调控,减少插排比较和交换次数 template <class T> void shell_sort(T arr[],int len){ int h=1; while(h<len/3) h=3*h+1; while(h>=1){ for(int i=h;i<len;i++){ T key=arr[i]; int j=i; while(j-h>=0&&key<arr[j-h]){ arr[j]=arr[j-h]; j-=h; } arr[j]=key; } h/=3; } } //对于增量以除以2递减的排序,时间代价:$\theta$(n^2^);选取的增量之间并不互质,上一轮排序中某些子序列已经排过了导致处理效率不高 //对于增量不以除以2递减的排序,时间代价:$\theta$(n^3/2^) qsort /*1.选择轴值 2.划分两个子序列L和R - 使得L中所有记录都小于或者等于轴值 - R中记录大于轴值 */ //采用双指针排列小序列,也可以使用夹逼的方式 int partitioner(int arr[],int low,int high){ int pivot=arr[high]; int i=low; for(int j=low;j<high;j++)//处理low~high-1的元素pivot分离 if(arr[j]<pivot) swap(arr[i++],arr[j]); swap(arr[i],arr[high]); //对小于pivot的最后一个元素的后一位置与pivot交换(包括边界) return i; } void qsort(int arr[],int low,int high){ if(low<high){ int mid=partitioner(arr,low,high); qsort(arr,low,mid-1); qsort(arr,mid+1,high); } } inline int findpivot(int* arr,int i ,int j){ return (i+j)/2; } inline int Partition(int* arr,int left,int right,int pivotindex){ swap(arr[pivotindex],arr[right]); int pivot = arr[right]; int i = left-1, j=right; do{ while(arr[++i] < pivot); while((i < j) && (pivot < arr[--j])); swap(arr[i], arr[j]); }while(i<j); swap(A[i],A[right]); return i; } inline int Partition(int* arr,int left,int right,int pivotindex){ swap(arr[pivotindex],arr[left]); int pivot = arr[left]; int i = left,j=right+1; while(ture){ while(arr[++i]<=pivot && i<right); while(arr[--j]>=pivot && j>left+1); if(i<j) swap(arr[i],arr[j]); else break; } swap(arr[j],arr[left]); return j; } //交换循环中要求对i,j索引有边界限制和qsort交换限制 //交换要求i<j //mid与pivot位置有关,pivot放在右边,则为i(第一个大于pivot的index);否则为j void qsort(int *arr,int left,int right){ if(left<right){ int pivotindex = findpivot(arr,left,right); int mid=Partition(A,left,right,pivotindex); qsort(A,left,mid-1); qsort(A,mid+1,right); } } merge_sort void merger(int arr[],int temparr[],int left,int mid,int right){ int l_pos=left; int r_pos=mid+1; int pos=left; while(l_pos<=mid&&r_pos<=right) { if(arr[l_pos]<arr[r_pos]) temparr[pos++]=arr[l_pos++]; else temparr[pos++]=arr[r_pos++]; } while(l_pos<=mid) { temparr[pos++]=arr[l_pos++]; } while(r_pos<=right) { temparr[pos++]=arr[r_pos++]; } while(left<=right) { arr[left]=temparr[left]; left++; } } void merge_sort(int arr[],int temparr[],int left,int right) { if(left<right){ int mid=(left+right)/2; merge_sort(arr,temparr,left,mid); merge_sort(arr,temparr,mid+1,right); merger(arr,temparr,left,mid,right); } } 二分法 原理:针对sortedArr,目标位于[left,right]之间,对middle搜索,right+1=left时终止。 ...

August 11, 2024 · 25 min · biglonglong

Cpp MultiThreads

前言 多线程相关操作,Linux选择使用的是POSIX标准,而Windows自己搞了一套系统调用,称为Win32 API,意味着Linux与Windows存在标准差异,直接导致能在Linux中运行的程序未必能在Windows中运行。 ...

February 17, 2025 · 9 min · biglonglong

CSAPP

C程序生命周期 // hello.c #include <stdio.h> int main() { printf("Hello, World!\n"); return 0; } 一个C程序,一般需要经过编辑、编译、运行和退出几个步骤。编译阶段,我们通过如下命令得到可执行目标文件: gcc -o hello hello.c 可执行目标文件的后缀依系统而定,如Windows下.exe,Linux下.out。编译系统大致分为: ...

May 24, 2025 · 31 min · biglonglong

OS Story

在正式开始操作系统学习前,我犹豫是否要构建一套体系化的学习笔记。然而,当回忆起初次接触操作系统时被庞杂概念"狂轰滥炸"的迷茫经历,决定还是以更轻松的叙事方式描述。 ...

July 15, 2025 · 5 min · biglonglong

NN Basic

Env # install IDE Anaconda Venv conda env list conda create --name <venv_name> python==<version> conda activate <venv_name> conda list conda deactivate # install Nvidia GetForce Driver nvidia-smi # install by pip or conda, attention to version alignment # torch from https://pytorch.org/ based on CUDA_VERSION # Sci-computer Lib, such as torchsummary, pandas,matplotlib, scikit-learn... # transformers datasets accelerate # bak conda create --name <venv_name>_snapshot --clone <venv_name> conda env remove --name <venv_name>_snapshot # proxy vim ~/.bashrc PROXY_SERVER="http://your_proxy_server_ip:port" export http_proxy="$PROXY_SERVER" export HTTP_PROXY="$http_proxy" export https_proxy="$PROXY_SERVER" export HTTPS_PROXY="$https_proxy" # export all_proxy="socks5://your_proxy_server_ip:port" # export ALL_PROXY="$all_proxy" # export no_proxy="localhost,127.0.0.1,::1,.local" # export NO_PROXY="$no_proxy" export HF_ENDPOINT=https://hf-mirror.com export HF_XET_CACHE=https://hf-mirror.com/xet source ~/.bashrc # verify # export HUGGINGFACE_TOKEN=<token> hf auth login hf auth whoami Tensor 一种专用于神经网络GPU计算的多维数组结构 ...

July 15, 2025 · 17 min · biglonglong