c++复习(一)

c++

1、c++如何确定常量的类型

假设在程序中使用常量来表示一个数字: cout<<"Year"<<1492<<endl; 那么程序会把1492存成什么类型呢?答案是,除非有理由存储为其他类型(如使用了特殊的后缀来表示特定的类型,或者值太大,不能存储为int),否则c++将整形常量存储为int类型。

2、c++11中auto的声明

在初始化过声明中,如果使用auto,而不指定变量的类型,编译器将把变量的类型设置成初始值相同:auto n = 100; //n为 int。

对于复杂类型,如标准模板库(STL)中的类型时,自动类型推断的有时才能显现出来,例如对于下面的c++98代码:

std : : vector<double> score;

std : : vector<double>::iterator pv = score.begin();

c++11允许这样做

std : : vector<double> score;

auto pv = score.begin();

3、c++11数组初始化方法

(1)、初始化数组时,可省略等号(=)

double arr[10] {1.0,2.0,4.3 };

(2)、可以不再大括号内包含任何东西,这将把所有元素都设置为0

int arr[10] { }; // 数组中元素都为0

(3)、列表初始化的时候禁止缩窄转换

long int arr[10] {24,89,8.9}; //不允许,因为将浮点数转换成整形是缩窄转换

char arr[10] {'h','i',17777777,'\0'};  //不允许,因为17777777超过了char类型的取值范围

char arr[20] {'j','i',122,'\0'};  //允许,虽然122是整形,但是它在 char变量的取值范围内

 

(4)、同样的,对于结构体也适用。

4、看一段程序

int main()

{

    char arr[20];

    cout<<strlen(arr)<<endl;  //未初始化的数组的内容是未定义的,函数strlen从数组的第一个元素开始计算字节数,直到空字符。因此这个值是未知的。

}

 

5、不要尝试释放已经释放的内存块,c++11规定,这样做的结果是不确定的,这意味着什么情况都可能发生。

6、不能用delete来释放new分配的内存,然而对空指针使用delete是安全的。

7、静态联编:在编译时分配内存;动态联编:在程序运行时创建。

8、new的空间必须用delete来释放,new [ ] 的空间必须用delete [ ] 来释放;如果不匹配,导致的后果是不确定的。

9、c++管理内存的方式:1、自动存储:自动变量(局部变量)通常存储在栈中。2、静态存储:一种是在函数外面定义,一种是在声明变量时使用关键字static 。 3、动态存储:在堆(或者成为自由存储区)上存储(使用new、malloc等函数)。4、线程存储(c++11)让程序放在可并行处理的不同线程中,使用关键字thread_local声明,声明周期与所属的线程一样长。

10、数组的替代品:1、vector,它使用new和delete管理内存。vector<typeName>  vt(n_elem) 创建一个名为vt的vector对象,它可以存储n_elem个类型为typeName的元素,其中n_elem可以是整形常量,也可以是整形变量。2、模板类array,他的长度是固定的,使用栈(静态内存分配),而不是自由存储区,因此效率与数组相同,比vector效率高。array<typeName,n_elem> arr; 其中n_elem必须是常量。

11、++i 和 i++区别:前缀++:将值加1,然后返回结果;但后缀版本首先复制一个副本,将其加1,然后将复制的副本返回。因此前缀版本的效率比后缀版本高。

12、逗号表达式从左往右计算,但是最后一个表达式的值是整个表达式的值。

13、范围for对数组(或者容器类,如vector和array)的每个元素执行相同的操作。

int arr[5] = {1,2,3,4,5};

for(int x : arr)

    cout<<x<<endl;

可以循环遍历数组中的每一个元素

for(int &x : arr)

    x = x*2;  //可以实际的操作数组中的元素

14、cin会忽略空格和换行符;发送给cin的输入被缓存,意味着只有用户按下回车键后,键入的内容才会被发送给程序。

15、区分cin.get(ch) 和 cin.get()

属性 cin.get(ch) cin.get()
传递输入字符的方式 赋值给参数ch 将函数返回值赋值给ch

用于字符输入时函数的返回值

istream对象(执行bool转换为true) int类型的字符编码
到达EOF时函数的返回值 istream对象(执行bool转换后为false) EOF

16、简单区别:

  • cin>>ch;  //读取输入的字符,但是它将忽略空格、换行符、制表符
  • cin.get(ch); //不管输入的字符是什么都会存储到ch中
  • ch = cin.get(); //返回下一个输入的字符(包括空格、换行符、指表符)
  • cin.get(char)成员函数调用通过返回转换为false的bool值来指出已到达EOF,而cin.get()成员函数调用通过返回EOF来指出已到达EOF,EOF是在文件iostream中定义的。

17、cctype中的字符函数

isalunm() 如果参数是字母或者数字,该函数返回true
isalpha() 如果参数是字母,该函数返回true
isdigit() 如果参数是数字(0-9),该函数返回true
islower() 如果参数是小写字母,该函数返回true
isspace() 如果参数是标准空白字符,如空格、进纸、换行符、回车、制表符、该函数返回true
isupper() 如果参数是大写字母,该函数返回true
isxdigit() 如果参数是16进制数字(0-9、a-f、A-F),该函数返回true
tolower() 如果参数是大写字符,则转成小写,否则返回该参数
toupper() 如果参数是小写字符,则返回其大写,否则返回该参数
iscntrl() 如果参数是控制字符,该函数返回true

 

猜你喜欢

转载自blog.csdn.net/qq_40421919/article/details/86594096