powershell就是cmd的升级版(集成了一些新的命令如ls)
anaconda powershell prompt 就是anaconda prompt的升级版(集成了一些新的命令如ls)
通用
dir:查看当前目录下的内容,dir .. 那么显示的是上级目录中的内容
md 目录名:创建文件夹
rd 目录名:删除文件夹
cd> 文件名: 创建文件
del 文件名: 删除文件
cd:实际上就是change directory,改变当前目录的意思,cd..即返回上一级
c:直接切换盘(\表示路径)
cls:清理屏幕:
exit:退出终端:
javac:编译java程序成字节码程序(.class)
java: 运行字节码程序
-d: 将运行生成的.class 文件输送到特定目录
-cp:用于执行引用了包的java.class 文件
python:运行python程序
g++ filename.cpp:生成的是a.exe
g++ -o output_filename filename.cpp :生成的是output_filename.exe
conda
创建环境:conda create -n env_name python=3.7
进入环境:activate env_name
离开环境:deactivate
列出环境:conda env list
删除环境:conda env remove -n env_name
安装包:conda install pakage_name
移除包:conda remove pakage_name
更新包:conda update package_name
列出包:conda list
git
本地仓库
git commit:创建新的提交记录
git branch 分支名:建立新的分支,切换到这个分支后就能对这个分支操作了
git checkout 分支名(当前^ 当前~n):切换到别的分支,或者向上切换一个或几个。head指向最新checkout的地方(可以指向分支或提交(分离head))
如果不是切换head而是移动分支的话,使用git branch -f 被移动的分支 移动到的提交。
git merge 分支名:在当前分支合并上别的分支,把不同的修改合并到一起
git rebase 分支名:移动到别的分支的下面,得到线性提交序列。做两次就能达到像merge一样的效果
git reset 分支名:回退到之前分支的地方,其子孙都不复存在。仅对本地仓库有效,无法push到远程仓库
git revert 当前分支:修改当前分支直到没修改过似的,形成一个新的记录。这种修改才能提交到远程仓库
git log:查看提交记录
远程仓库
git clone:克隆一个仓库到本地,所在分支为o/main(远程仓库名/分支名),在本地修改这个仓库后再怎么提交,o/main的指向始终指向远程分支都不变,除非远程仓库变了(比如修改了main(自动跟踪o/main)再push)
获取本地和远程对应推送位置的方法:
- 默认:根据名字,main对应o/main
- 指定属性:main跟踪o/main是自动生成的,如果想自己创建一个跟踪分支,就可以使用git checkout -b 分支名 要跟踪的远程分支,也可以使用git branch -u 要跟踪的远程分支 分支名
- 指定参数:git push 远程仓库 本地要推送的分支,这种方式就不需要head跟踪当前分支,本地推送的默认是推送到远程仓库中同名的分支,如果要自己指定推送的地方,可以使用git push 远程仓库 源(如果源不存在相当于传空值给目的,相当于删除远程仓库中的分支):目的(如果目的不存在会自动创建)
git fetch:拉取远程分支并且更新本地中的对应的远程分支,单纯的下载,不会更新原有的
- 指定参数:git fetch 远程仓库 远程仓库中要拉取的分支,但只是单纯的下载,分支还是o/~ 后续可以再merge(相当于git pull 远程仓库 远程仓库中要拉取的分支),但如果想直接合并到本地代码的话,可以git fetch origin 远程仓库中的分支(如果为空相当于为本地新建一个分支):本地仓库的分支。(如果本地不存在会自动创建),再加上merge其实相当于git pull加上这些参数
git fetch和git merge就是拉取后进行合并,而git pull等价于两个操作一起执行
git push:把本地的更新同步到远程仓库,如果仓库已经有更新了,就要先fetch下来再rebase(或者直接git pull --rebase)后到同一线性(或者加merge,也就是pull),再push就行
在实际的合作中,应该建立自己的远程分支,最后合并时,先使用git pull-rebase和git rebase合并到同一条链中,最后再push上去
c++11中如果使用new进行动态内存分配,很容易忘掉释放内存导致内存泄漏,此时可以使用智能指针实现自动释放,定义为局部变量。
unique_ptr
一个指针指向一块内存,如果要重新指向,使用reset
构造:
赋值:仅支持右值赋值
放弃控制权:指针.release(),这时就没有指针托管这块内存了,记得使用
shared_ptr
允许多个指针指向同一个变量(直接赋值或者构造就行),使用计数器(use_count())来维护共享变量数。交叉使用可能导致内存泄漏->weak_ptr指针
构造:
reset()实现重置,可传入删除器。
交换:swap()
weak_ptr
辅助shared避免循环引用,构造和析构时不会导致计数器改变,但仍可以计数、赋值等无法使用*或者->
构造:
转换为shared_ptr正常使用:lock()
expired():没有托管对象就已经开除,返回true