• 你发现了奇怪的笔记一(C++)


    类型

    基本类型:
    	数值类型:
    		整形:
    			1.短整型:short
    			2.整形:int
    			3.长整型:long
    			4.空类型:void
    		浮点型:
    			1.单精度型:float     有效位数6-7位,单精度数后需写f
    			2.双精度型:double    默认15-16位
    	字符类型:char
    复合类型:
    	1.数组:[] 
    	2.结构体:struct
    	3.共用体:union
    	4.枚举类型:enum
    	5.类:class
    	6.指针类型:*
    c语言中没有bool   c语言中用非0为真,以0代表假
    

    cerr

    • cerr不会写入缓冲区。直接输出。

    字节

    • 可寻址最小内存块称为“字节”,存储的基本单元称为“字(word)"

    变量

    • 变量是一个具有名字,可供操作的存储空间。
    • 变量只能被定义一次,但是可以有多次初始化(extern)

    初始化不是赋值

    • 初始化是创建变量时赋予一个初始值。
    • 赋值是把对象当前的值抹除,以一个新值替代

    初始化列表

    • {}初始化列表中的值类型必须相同。()则会自动转换
    • long double ld = 3.14; int a{ld};报错
    • long double ld = 3.14; int a{ld};正确

    初始化

    • 定义在任何函数体之外的变量初始值都为0
    • string除外。在任何地方初始化都为空串”“

    引用和指针

    • 引用必须初始化,初始化绑定后,一直绑定在一起,不可修改绑定

    • 引用初始化类型必须相同(类型不同,初始化时会先创建一个临时变量。称为临时量。引用临时量,修改值,原来的值不会修改,故报错)

    • 两种类型间指针赋值类型必须相同。不能将double类型指针赋给int类型指针

    • NULL 是预处理变量。值为0

      int zero = 0;
      int *pi;
      pi = zero; //错误,不能把int变量直接赋给指针
      pi = 0;	//正确,空指针
      
    • void*类型指针不能被直接操作,因为不知道具体类型,不知道这个对象有些什么操作

    • int *p; int *&r = p; //r是一个对指针引用p的引用

    • 解析类型从离变量最近的修饰符开始。从右到左

    const

    • const
    const int i = get_size();//正确,运行时初始化
    const int j=42;//正确,编译时初始化
    const int k;//错误,k是一个未经初始化的--常量
    
    • const和引用
    const int ci=1024;
    const int &r1=ci;//正确,引用及其引用对象都是常量
    r1 = 42;//错误,r1是对常量的引用
    int &r2=ci;//错误,试图让一个非变量引用指向一个常量对象
    const int &r3 = 42;//正确,r3是一个常量引用
    
    • 顶层和底层const

    顶层:表示本身是个常量(指向常量的指针)

    const double pi = 3.14;
    double *ptr = ≺//错误,ptr是一个普通指针
    const double *cptr=π//正确,cptr是一个指向double常量的指针
    *cptr = 42;//错误
    

    底层:表示指向的对象是一个常量(常量指针)

    const int ci=42; const int &r = ci;//用于声明的const都是底层const

    对常量对象取地址是一种底层const

    int errNumb = 0;
    int *const currErr = &errNumb;//currErr将一直指向errNumb
    const double pi=3.14;
    const doubele *const pip=*pi;//pip是一个指向常量对象的常量指针
    

    constexpr变量

    • constexpr int sz = size(); //只有当size()是一个constexpr函数时,才是一条正确的声明语句。不然报错
    • 指针和constexpr
    const int *p=nullptr;//p是一个指向整型常量的指针
    constexpr int *q=nullptr;//q是一个指向整数的常量指针
    ----》constexpr把它所定义的对象置为顶层const
    
    constexpr int *np = nullptr;//指向整数的常量指针。值为空
    int j=0;
    constexpr int i=42;//i的类型是整型常量
    //i和j都必须定义在函数之外
    constexpr const int *p=&i;//p是常量指针,指向真相常量i
    constexpr int *p1=&j;//p1是常量指针,指向整数j
    

    decltype类型指示符

    • 解引用指针可以得到指针所值的对象,而却还能给这个对象赋值,因此decltype(*p)的结果类型是int&,而非Int
    • decltype((variable))------>双层括号---结果永远是引用
    • 返回类型---》包括顶层const
    • auto---》会忽略顶层const
    • 必须牢记decltype用于某个函数时,它返回函数类型而非指针类型(函数指针),因此需要显示的加上*表示我们需要返回指针,而非函数本身

    string

    string初始化方式

    core 解析
    string s1 默认初始化,s1是一个空串
    string s2(s1) s2是s1的副本
    string s2 = s1 等价于s2(s1)
    string s3("value") s3是字面值”value"的副本,除了字面值最后的空字符外
    string d3="value" 等价于s3("value")
    string s4(n,'c') 把s4初始化为由连续n个字符c组成的串

    string操作

    方法 解释
    os<<s 将s写到输出流os当中,返回os
    is>>s 从is中读取字符串赋给s,字符串以空白分隔,返回is
    getline(is,s) 从is中读取一行赋给s,返回s
    s.empty() s为空返回true,否则返回false
    s.size() 返回s中的字符个数,不含最后的空字符,返回类型string::size_type
    s[n] 返回s中第n个字符的引用,位置n从0计起
    s1+s2 返回s1和s2连接后的结果
    s1=s2 用s2的副本代替s1中原来的字符
    s1==s2 如果s1和s2中所含的字符串一样,则相等,反之不相等---》大小写敏感
    <,<=,>,>= 利用字符在字典中的顺序进行比较,且对字母的大小写敏感

    切记

    • 字符串字面值与string是不同的类型
      string str = ("hello"+",")+str2;//错误,不能把字面值直接相加
    • 字面值:不能改变的值,如数字,字符,字符串等等。

    cctype函数

    • 字母与数字
    函数 判别的字符类型
    isalnum(c) 当c是字母或者数字时为真
    isalpha(c) 当c是字母时为真
    iscntrl(c) 当c是控制字符时为真
    isdigit(c) 当c是数字时为真
    isgraph(c) 当c不是空格但可以打印时为真
    islower(c) 当c是小写字母时为真
    isprint(c) 当c是可打印字符时为真(即c是空格或者c具有可视形式)
    ispunct(c) 当c是标点符号时为真(即c不是控制字符,数字,字母,可打印空白中的一种)
    isspace(c) 当c时空白时为真(即c是空格,横向制表符,纵向制表符,回车符,换行符,进纸符中的一种)
    isupper(c) 当c是大写字母时为真
    isxdigit(c) 当c是十六进制数字时为真
    tolower(c) 如果c是大写字母,输出对应的小写字母;否则原样输出
    toupper(c) 如果c是小写字母,输出对应的大写字母;否则原样输出

    vector

    • 初始化
    vector<int> v1{a,b,c,...}
    vector<int> v2={a,b,c,...}
    其他和string一样
    
    注意1
    vector<string> v1{"hi"};//初始化正确
    vector<string> v2("Hi");//错误,不能直接使用字符串字面值构建vector对象
    注意2
    vector<int> v2(10,1);--》10个1,10个值
    vector<int> v2{10,1};--》一个10,一个1,两个值
    
    • 方法

    size():和string一样,返回类型注意一下,也是size_type.当作用域不同,vector::size_type--->不是vector::size_type

    empty()

    ....和string重合---》os<<v;is>>v;不同

    v.push_back(t) 向v的尾端插入值为t的元素

    迭代器

    • 如果容器为空,则begin和end返回的是同一个迭代器,都是尾后迭代器
    • 迭代器间的距离:类型difference_typed,带符号整数,距离可正可负。string和vector都定义了这个类型

    操作

    支持:*iter iter->mem ++iter --iter iter1==iter2 iter1!=iter2;

    谨记

    但凡是使用了迭代器的循环体,都不要向迭代器所属的容器添加元素。添加元素,迭代器对象失败,但可以重新获取插入后的迭代器

  • 相关阅读:
    JavaScript 简介
    HTML 标签列表
    HTML5 是什么
    初识HTML5
    Conda 环境增删改查导出导入
    Windows 下安装 CGAL 并验证安装
    3D 点云数据集整理分析
    内网穿透
    SSH 免密登录
    串口、COM口、TTL、RS-232、RS-485区别详解
  • 原文地址:https://www.cnblogs.com/ysjcqs/p/cppnote1.html
Copyright © 2020-2023  润新知