C++阶段学习总结

第四章 复合类型

一·

数据类型分为内置类型和自定义类型。

内置类型分为基本类型和复合类型。基本类型分为算数类型和void类型。

算数类型分为整值类型和浮点类型。整值类型分为字符类型和布尔类型以及整数类型

自定义类型分为用户自定义和标准库中定义的类型。

1.constexpr对象

例:

constexpr int size = 20;       // 20是常量表达式

constexpr int limits = size + 10;  // size+10是常量表达式

constexpr int max = length();     

//只有length()是一个constexpr函数时,max的声明才正确

constexpr和const对象

constexpr int a = length();

        //必须在编译时能计算出length()返回值

const int b = length();   

        //b的值可以在运行时才获得,之后不改变

2. auto类型说明符

例:auto x = 5;            //5是int类型,所以x是int类型

auto size = sizeof(int);   //x是表示内存字节数的类型

                   //具体类型不清楚

auto name = "world";       //name要保存字符串"world"

                   //具体类型不清楚

cout << "hello, " << name; //此时name的类型是什么并不重要

auto a;             //错误:没有初始值

auto r = 1, pi = 3.14;     //错误:r和pi推断的类型不一致

3. decltype类型指示符

decltype(sizeof(int)) size;   //size的类型是sizeof(int)结果的类型

const int ci = 0;

decltype(ci) x = 1;   //x的类型是const int

decltype(f()) y = sum;       //y的类型是函数f()的返回值类型

4. range-for语句

例:

// 累加20以内的素数

int sum = 0;

for(int e : {2, 3, 5, 7, 11, 13, 17, 19})

    sum += e;

cout << sum << endl;       //输出77

// 将数组的每个元素加倍

int arr[] = {1, 3, 5, 7, 9};

for(auto ele : arr) {

    ele = ele * 2;                

    cout << ele << " ";           

}                   // 输出:2 6 10 14 18

for(auto ele : arr)

    cout << ele << " "; // 输出:1 3 5 7 9 ?

二.指针和应用

1.指针

int  *pi;

int* pi;   

char *pc1, *pc2;

char* pc1, pc2;

char *pc1, pc2;

char* pc1, *pc2;

2.取地址运算符“&”

int ival = 120;

int  *pi = &ival; 

        // pi存放int变量ival的地址

        // 或者说pi指向ival

char ch = 'a', *pc = &ch;

        // pc指向字符型变量ch

3.空指针

生成空指针的3种方法

int *p1 = nullptr;

int *p2 = 0;     

int *p3 = NULL;:库函数

4. 通用指针void*

可以持有任何类型的地址值,即通用指针

void* pv = &a;

5. 动态存储空间管理

New

分配单个对象:new 类型 或者 new 类型(初始值)

分配多个连续存储的对象:new 类型[数组大小]

定位new,在指定位置分配空间:new (指针) 类型;

Delete

释放new分配的单个对象的delete形式

delete 指针;

释放new分配的数组的delete形式

delete[] 指针;

6.左值引用

引用一般指左值引用

间接操控对象     在程序中引用主要用作函数的参数

引用的定义和初始化

引用由类型标识符和一个取地址符(&)来定义

type& refVariable = leftValue;

引用必须被初始化,初始值是一个有内存地址的对象

7.右值引用

右值引用就是必须绑定到右值的引用

定义和初始化右值引用的形式

类型 &&右值引用变量 = 右值表达式;

右值引用由类型标识符和两个取地址符(&&)定义

右值引用必须被初始化,初始值是右值表达式

不能将右值引用直接绑定到一个左值上

std::move

函数std::move函数返回给定对象的右值引用

标准库中定义

int &&rr1 = 10;        //右值引用

8. CV限定词

const限定词

关键字const限定的对象是不可改变的

volatile限定词

关键字volatile限定的对象不能被编译器例行优化

9. const限定指针

指向const对象的指针(非const )

const type *cp; 或者type const *cp;

指向非const对象的const指针

type* const cp = initAddressValue;

指向const对象的const指针

const type* const cp = initAddressValue;

三.:

1.struct 结构体类型名{

    成员声明;

};

//定义结构体类型X

struct X { 

char c;

int i;

float f;

double d;

};         

//定义X类型的变量

X s1, s2;      

//通过X变量s1引用成员c

s1.c = 'a';    

s1.i = 1;

s1.f = 3.5;

s1.d = 0.7

//通过指针ps引用成员c

X* ps = &s1;

s2.c = ps->c;

2.枚举

enum TrafficLight { red, green, yellow };

3. 数组与指针

int a[10];

//指针访问数组元素

for(int *p = a; p < a+10; p++)

    cout << *p;

四.

1. 标准库string类

使用string 类要包含头文件

例:

#include

#include

using namespace std;

int main(){

string s1, s2;        

string s3 = "Hello, World!";  

string s4("I am ");

s2 = "Today";             

s1 = s3 + " " + s4;       

s1 += " 5 ";              

cout << s1 + s2 + "!" <

2.

String s1         默认初始化,s1是一个空串

String s2(s1)     s2是s1的副本

String s2=s1        等价于s2(s1)

String s3(“value”)       s3(是字面值“value”的副本,除了字面值最后的空字符外

String s3=”value”    等价于s3(“value”),s3是字面值(“value”),s3是字面值“value”的副本

String s4(n,’c’)    把s4初始化为由连续n个字符c组成的串

isalnum()  如果参数是字母数字,即字母或者数字,函数返回true

isalpha()  如果参数是字母,函数返回true

iscntrl()  如果参数是控制字符,函数返回true

isdigit()  如果参数是数字(0-9),函数返回true

isgraph()  如果参数是除空格之外的打印字符,函数返回true

islower()  如果参数是小写字母,函数返回true

isprint()  如果参数是打印字符(包括空格),函数返回true

ispunct()  如果参数是标点符号,函数返回true

isspace()  如果参数是标准空白字符,如空格、换行符、水平或垂直制表符,函数返回true

isupper()  如果参数是大写字母,函数返回true

isxdigit() 如果参数是十六进制数字,即0-9、a-f、A-F,函数返回true

 

tolower()  如果参数是大写字符,返回其小写,否则返回该参数

toupper()  如果参数是小写字符,返回其大写,否则返回该参数

五. 标准库类型vector

#include

#include

using namespace std;

int main(){

    vector iv(10);

    for(int id = 0; id < 10; id++)

        iv[id] = id;

    vector anotherv;

    anotherv = iv;

    cout<<"size:"<

    for(int id = 0; id < 10; id++)

        cout<

}

第五章  函数

一 .//算法:n! = 1 * 2 *  ... * (n-1) * n

//函数名fact,返回类型int,一个int类型的形参n

int fact(int n)

{                   //函数体开始

int ret = 1;

while ( n > 1 )    //求阶乘

    ret *= n--;

return ret;        //返回结果

}                  //函数体结束

2. 指针参数传递

传递指针参数,交换两个变量的值

void pswap(int *pv1, int *pv2)

{

int t;

t = *pv1;  *pv1 = *pv2;  *pv2 = t; //间接访问

}

int main(){

int ival1 = 10, ival2 = 20;

int *p1 = &ival1;

int *p2 = &ival2;

cout << ival1 << " " << ival2 <

pswap(p1,p2);

cout << ival1 << " " << ival2 <

}

你可能感兴趣的:(C++阶段学习总结)