const

[SHOI2012]回家的路

旧街凉风 提交于 2020-03-31 21:33:39
分层图,每个转弯定义为一个操作,所以建立一个上层全是x轴,下层全是y轴,两层之间连一条权值为1的边代表转弯的代价。。挺简单的其实 https://www.luogu.com.cn/problem/P3831 #include<iostream> #include<cstring> #include<queue> #include<algorithm> #include<cstdio> #include<vector> using namespace std; typedef long long ll; const int INF = 1e17 + 11; const int maxn = 3e5 + 333; const int N = 1e5 + 11; ll dis[maxn]; int vis[maxn]; struct Node { int p; ll len; int nxt; }G[maxn * 2]; int z; int head[maxn]; void add(int be, int en, ll len) { G[++z].p = en; G[z].nxt = head[be]; G[z].len = len; head[be] = z; } bool operator <(const Node a, const Node b) { return a.len >

【C#】获取电脑DPI

心不动则不痛 提交于 2020-03-31 16:08:59
public static class DPIGeter { /// <summary> /// 获取DPI /// </summary> /// <param name="dpix"></param> /// <param name="dpiy"></param> public static void GetDPI(ref float dpix, ref float dpiy) { SetProcessDPIAware();//此处会忽视系统DWM虚拟化,不建议使用 IntPtr screenDC = GetDC(IntPtr.Zero); dpix = GetDeviceCaps(screenDC, LOGPIXELSX); dpiy = GetDeviceCaps(screenDC, LOGPIXELSY); ReleaseDC(IntPtr.Zero, screenDC); } /// <summary> /// 获取DPI缩放比例 /// </summary> /// <param name="dpiscalex"></param> /// <param name="dpiscaley"></param> public static void GetDPIScale(ref float dpiscalex, ref float dpiscaley) { int x =

C++基本功:全面掌握const、volatile和mutable关键字

时光怂恿深爱的人放手 提交于 2020-03-31 13:18:40
C++ 程式设计过程中 ,const 的使用可以频度是非常高的 . 它在保证程式安全方面起到了不可估量的作用 . 用一句话来表达最确切不过了:"小兵立大功" . 有了 const, 那么 mutable 当然缺不了 . 然作为 const 的同胞兄弟 ,volatile 却在很多人的视野中消失 . 其实 volatile 担负的责任有何尝小呢 ? 自然 , 它们的用法多样而灵巧 , 以至新手迷惑久久 , 下面就来系统的探讨总结一下吧: 一 . 一般应用 1.const 修饰各种变量的用法 . a. 取代 define #define D_INT 100 #define D_LONG 100.29 ……… const int D_INT = 100; const D_INT = 100; // 如果定义的 int 类型 , 可省略 int. const long D_LONG = 100.29; ……… const int& a = 100; const 替代 define 虽然增加分配空间 , 可它却保证了类型安全 . 在 C 标准中 ,const 定义的数据相当于全局的 , 而 C++ 中视声明的位置而定 . b. 修饰指针相关的变量 以三组简单的定义示意: Group1: int a = 0; const int* b = &a;------------ [1] int

嵌入式C语言4.2 C语言内存空间的使用-指针与修饰符:const,volatile,typedef

女生的网名这么多〃 提交于 2020-03-31 13:16:08
const:变量,只读【不能变】 内存属性: 1. 内存操作的大小 2.内存的变化性,可写可读 char *p; const char *p; 描述字符串,p指向的内容是只读的,不可再次修改 char const *p; char * const p; 硬件资源的定义 char *p const; const char *const p; 举个例子: 虽然在定义指针p的过程中,前面没有写const,但是默认了他是只读属性,不能对访问内容修改 这个segmentation fault就是非法访问报错的! 正确写法: 2. volatile 主要应用于硬件中 防止优化指向内存地址 char *p; volatile char *p; 3. typedef 别名 什么类型 变量名称; xxx a; char *name_t; // name_t 是一个指针,指向了一个char类型的内存 typedef char * name_t; //name_t是一个指针类型的名称,指向了一个char类型的内存 来源: https://www.cnblogs.com/ivyharding/p/11146915.html

Overloaded operators

南楼画角 提交于 2020-03-31 02:50:28
目录 Overloaded operators Restrictions Member Functions The prototypes of operators operator ++ and -- Relational operators operator [] operator = Value classes Overloaded operators Restrictions Only existing operators can be overloaded. Operators must be overloaded on a class or enumeration type Overloaded operators must Preserve number of operands Preserve precedence Just a function with an operator name! Use the operator keyword as a prefix to name operator *(...) Member Functions Implicit first argument Developer must have access to class definition Members have full access to all data in

define和typedef

梦想的初衷 提交于 2020-03-31 00:43:35
参考: 【C++】define 和typedef 的详细区别 define与typedef区别与联系 #define(宏定义)只是简单的字符串代换(原地扩展),它本身并不在编译过程中进行,而是在这之前(预处理过程)就已经完成了。 typedef是为了增加可读性而为标识符另起的新名称(仅仅只是个别名),它的新名字具有一定的封装性,以致于新命名的标识符具有更易定义变量的功能,它是语言编译过程的一部分,但它并不实际分配内存空间。 一般都遵循#define定义“可读”的常量以及一些宏语句的任务,而typedef则常用来定义关键字、冗长的类型的别名。 typedef是语句( 以';'结尾),而#define不是语句( 不以';'结尾) typedef int * int_ptr; #define INT_PTR int * const int_ptr p; //p不可更改,但p指向的内容可更改 const INT_PTR p; //p可更改,但是p指向的内容不可更改 int_ptr是一种类型(类型本身就是整型指针),const int_ptr p就是把指针给锁住了p不可更改,而const INT_PTR p是const int * p锁的是指针p所指的对象。这些使用常常使我迷惑,所以搜集整理对他们的理解如下: #define的用法: 1、简单的宏定义 #define MAXTIME

星号的秘密

北慕城南 提交于 2020-03-30 17:20:42
1 、乘法运算符 2 、定义指针 int *p = 0; 还是 int* p = 0;? 后一种比较容易这样理解:定义了一个变量p,它是指针型的(更详细一点,是指向int的指针型),相比而言,前面一种定义似乎是定义了*P这个奇怪的东西。但是后面一种写法会带来一个容易产生的误解: int* p1, p2; 这儿给人的感觉似乎是定义了两个指针型变量p1和p2,但是,事实上,这种直觉是错误的,正确的理解方式是int *p1, p2;即p1是指针型的,而p2确是整型的。 在MS VC++ 6.0中,是按照后面一种格式写的。 3 、何谓指针? 指针仅仅表示一个内存中的某个地址? 非也,注意到,我们在定义指针的时候,都关联了一个类型,如int,char,或者是string等等,如果说指针仅仅表示一个内存中的地址,那何必要关联这么多变化的东西呢?完全可以DWORD p=0;这样解决问题。 关联了的数据类型是作何用的呢? 它可以指示编译器怎样解释特定地址上内存的内容,以及该内存区域应该跨越多少内存单元。如 int *p; 编译器可以从这个定义中获得信息:1、p指向的内存存放的是整型数据,2、由于该内存区域只存放了一个数据,跨越的内存区域为4个字节,即p+1的效果是跳过了四个字节。 另一个复杂一点的例子,如 struct a {int x1; short x2; a *next; } 定义指针 a

C++_系列自学课程_第_8_课_指针和引用_《C++ Primer 第四版》

偶尔善良 提交于 2020-03-30 17:15:54
   C语言最富有迷幻色彩的部分当属指针部分,无论是指针的定义还是指针的意义都可算是C语言中最复杂的内容。指针不但提供给了程序员直接操作硬件部分的操作接口,还提供给了程序员更多灵活的用法。C++继承这一高效的机制,同时引入了另一个与指针相似但 不相同的机制: 引用。 一、引用   简单的来说,引用就是变量的别名(alias), 通过别名我们可以操作引用代表的变量。 定义一个引用的语法如下所示:     变量类型 &引用标识符 = 变量名。 Exp:   int iVar=10;   int &iRef = iVar;   iRef = 20 ;   cout<<iVar<<endl;   这段程序执行的结果就是输出: 20 ;   程序通过引用 iRef 改变了变量iVar的值。 要点:   1、在定义引用的同事必须初始化,指出引用代表的是哪一个变量,而且这种“指向关系”不能改变。   2、引用只是对象的另一个名字,可以通过对象的原标识符访问对象,也可以通过对象的引用访问对象。   3、在一个语句定义多个引用的时候,每个引用标识符(引用名)的前面必须都加上&符号,否则就是错误。 1、const引用   const引用是指向const对象的引用, 不能通过const引用改变原对象的值。如下所示: 1 #include <iostream> 2 #include <string> 3

C++星号的含义

爷,独闯天下 提交于 2020-03-30 17:03:04
1 、乘法运算符 2 、定义指针 int *p = 0; 还是 int* p = 0;? 后一种比较容易这样理解:定义了一个变量p,它是指针型的(更详细一点,是指向int的指针型),相比而言,前面一种定义似乎是定义了*P这个奇怪的东西。但是后面一种写法会带来一个容易产生的误解: int* p1, p2; 这儿给人的感觉似乎是定义了两个指针型变量p1和p2,但是,事实上,这种直觉是错误的,正确的理解方式是int *p1, p2;即p1是指针型的,而p2确是整型的。 在MS VC++ 6.0中,是按照后面一种格式写的。 3 、何谓指针? 指针仅仅表示一个内存中的某个地址? 非也,注意到,我们在定义指针的时候,都关联了一个类型,如int,char,或者是string等等,如果说指针仅仅表示一个内存中的地址,那何必要关联这么多变化的东西呢?完全可以DWORD p=0;这样解决问题。 关联了的数据类型是作何用的呢? 它可以指示编译器怎样解释特定地址上内存的内容,以及该内存区域应该跨越多少内存单元。如 int *p; 编译器可以从这个定义中获得信息:1、p指向的内存存放的是整型数据,2、由于该内存区域只存放了一个数据,跨越的内存区域为4个字节,即p+1的效果是跳过了四个字节。 另一个复杂一点的例子,如 struct a {int x1; short x2; a *next; } 定义指针 a

21天学通c++之第二周 指针 8.10 使用指向const对象的指针

霸气de小男生 提交于 2020-03-30 16:47:15
#include <iostream> using namespace std; class Rectangle { public: Rectangle(); ~Rectangle(); void setlength(int length){itslength=length;} int getlength()const{return itslength;} void setwidth(int width){itswidth=width;} int getwidth()const{return itswidth;} private: int itslength; int itswidth; }; Rectangle::Rectangle() { itswidth=5; itslength=10; } Rectangle::~Rectangle() { } int main() { Rectangle* prect=new Rectangle; const Rectangle * pconstrect=new Rectangle; Rectangle * const } 来源: https://www.cnblogs.com/byeday/archive/2008/12/03/1346776.html