C++11关于四个引用的学习
0x01 引用的嵌套It is permitted to form references to references through type manipulations in templates or typedefs, in which case the reference collapsing rules apply: rvalue reference to rvalue reference collapses to rvalue reference, all other combinations form lvalue reference
引用折叠规则:右值对右值的引用折叠为右值引用,所有其他组合为左值引用。
0x02 左值引用Lvalue references can be used to alias an existing object (optionally with different cv-qualification):
左值引用可以作为一个已存在对象的别名,且可以用多个别名,别名之间共享一个对象。
1234567891011int main(){ s ...
安装Ubuntu虚拟机
0x01 创建虚拟机先在VMware创建一个虚拟机容器,直接点击”创建新的虚拟机“就好了。
点击稍后安装操作系统,到时候去Ubuntu官网下载一个映像文件。
选择Ubuntu 64位,操作系统当然是Linux。
之后的虚拟机名称,默认就好了,无所谓,位置放到一个容易管理的文件夹里。
选择将虚拟磁盘储存为单个文件,最大磁盘大小并不会一开始就占用你20GB内存,而是动态扩展的,有大容量需求的话可以多分配一点,对我来说20GB绰绰有余了。
之后点击完成,虚拟机就创建好了。
0x02 安装Ubuntu去Ubuntu的官网下载Linux系统映像文件(传送门)
我安装了这个23.10版本,是去年10月份的最新版本。
大概有4GB左右,安装得有点慢。
安装好后将他放在随便一个文件夹里,最好是能找得到的,我创建了一个software文件夹来存放它。
再次打开Vmware,选择我们之前创建的虚拟机,点击编辑此虚拟机,
这里可以调整内存大小,我们先不管,点击CD/DVD,选择使用ISO映像文件,预览我们之前下载好的映像文件。
选择好之后就可以启动虚拟机了。
第一次启动会配置一些东西,一直下一步就 ...
图论算法
0x01 Dijkstra算法(寻找有权图最短路径)看视频的讲解实现的,P4(视频地址)
这里默认源点是1,之后再改改自定义源点的,
这个算法的大致思路是,从一个源点开始,把他压入优先队列(小的先出),然后给存储最短路径的dis数组全部初始化无穷大,接着就可以开始循环了。只要队列不为空,我们就一直取队列里的元素,然后判断由这个节点到下个节点的路径是不是最小的,如果是就把下个节点压入队列,若不是就不压入。每个节点到源点的最短路径是递归而来的。
算法就是一直在完善这个表。由于有优先队列存在,省去了无意义的路线判断,很大程度上一次就可以寻得最短路径,因为是从小权重的边开始寻路的。
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667#include<iostream>#include<math.h>#include<algorithm>#include< ...
STL队列和栈
0x01 栈1#include<stack>
先记录一下栈stack。
和数据结构教材讲的性质基本一致,这里记录一下STL实现栈的方法。
1stack<typename T, typename Container = deque<T>>
栈的类模板,第一个参数是存储对象的类型,第二个参数是底层容器的类型。
还有一个swap函数,swap(stack &other_stack),能将当前栈中的元素和参数中的元素交换。stack模板还有赋值运算符重载,operator=( )。
访问栈:
123456789101112deque<int> data{0,1,2,3,4}; //初始化一个栈stack<int> data(data); cout<<"data : "<<data.size()<<endl; while(!data.empty()){ //获得栈顶元素 cout<<data.top()<< ...
vector容器基础
0x01 vector构造函数
除了第一种,其他几种基本都是拷贝构造而来的。
12vector<int>v(10,100);//压入10个100的int数
拷贝构造函数
12vector<int>v2(v);//拷贝了v的10个100
0x02 vector赋值操作
第一种就是等号运算符重载,直接v1 = v2赋值就好了。
0x03 vector容量和大小
empty( ),若容量为空则返回true,不为空则返回false。
capacity( )是返回容器的容量的函数,容器的容量不小于容器中元素的个数(常识)。
resize函数能调整容器的大小(长度size,并非容量)。
resize函数若不指定填充的元素elem,则默认填充0。
0x04 vector插入和删除
这里重点记录一下迭代器修改元素的方法。
123//迭代器插入法v1.insert(v1.begin(),100);//在v1.begin()的位置插入100,v1.begin()是指向首元的迭代器
注意const_iterator pos 位置是传入迭代器就好了。
0x05 vector数据存取
没 ...
记录一下刷的入门题
0x01 P1009 [NOIP1998 普及组] 阶乘之和这题要用高精度乘法和高精度加法,把每位数字单独存储到一个数组中,每个元素如果大于9再进位,以此类推。这题的乘法是半个高精度,一个是高精度数字,另一个是普通的int数,简单了一点。
不过如果两个都是高精度数的乘法,原理差不多,就是把这个一个高精度一个普通的做好多遍,然后全部加起来再进位就好了,以后有机会再写。
12345678910111213141516171819202122232425262728293031323334353637383940#include<iostream>#include<math.h>#include<algorithm>using namespace std;int i,sum[1005]={0},one[1005]={0},n,j;int main(){ cin >> n; sum[0]=one[0]=1; for (i=2;i<=n;i++){ f ...