1.auto函数:
auto可以自动识别变量类型;
auto还可以跟for循环结合用来遍历数组或者字符串
auto可以遍历当前数组或字符串的每一个值,auto& i,中的i相当于一个指针,该指针从0开始一直到结束,可以通过更改*i的值对数组或者字符串进行更改。
string s; int arr[] = {0};
for(auto i :s) for(auto i :arr)
2.ispunct():
int ispunct(int c) 检查所传的字符是否是标点符号字符,并统计标点字符的个数。
3.vector:(对象的集合,其中所有对象的类型都相同)
1.初始化操作
头文件:#include<vector>
vector<int>v1;//v1的元素数量为0;
vector <int>v2(10);//v2的数量为10,每个元素被初始化为0;
vector <int>v3(10,1);//v3的数量为10,每个元素被初始化为1.
vector <int>v4{10};//v4的数量为1,元素的值为10.
vector <int>v5{10,1};//v5的数量为2,元素值为10,1
vector <string>v6{10};//v6的数量为10,每个元素都被初始化为空串。
vector <string>v5{10,“a”};//v7的数量为10,每个元素都被初始化为a。
2.vector基本操作:
v1.push_back(i) / /向vector对象中添加元素。i为输入值,v1为某类型的vector对象。
切记:不能用下标形式添加元素,且只能对确认已存在的元素执行下标操作。
vector对象(以及string对象)的下标运算符可用于访问已存在的元素,而不能用于添加元素。
3.vector的访问
使用vector储存对象,且用cin输入对象时,遇到空格后停止输出。string类第一次输入时只占用vector的一个空间,即v[0]。想访问v[0]的元素需要调用一次for循环,然后在对v[0]中存储的string
再进行一次for循环的访问才能访问到第一次输入时的每个元素。见下图
4.用数组初始化vector对象
vector与数组的区别:
4.迭代器:
访问容器元素的通用机制,与指针类型相似,迭代器也提供了对象的间接访问。
使用迭代器可以访问某个元素,迭代器也能通过某个元素移动到另一个元素。
1. v1.cbegin()与v1.cend():{读取数据无需更改}
v1.begin()与v1.end():读写内容并需要更改时使用
2.迭代器的运算符
3.用迭代器遍历元素
string s;
for(auto it = s.begin();it!=s.end();++it)
4.迭代器运算:
5.extern "C" 的作用:
是为了能够正确的实现 C++ 代码调用 C 语言代码。加上 extern "C" 后,会指示编译器这部分代码按照 C 语言(而不是 C++)的方式进行编译。由于 C++ 支持函数重载,因此编译器编译函数的过程中会将函数的参数类型也加到编译后的代码中,而不仅仅是函数名;而C语言并不支持函数重载,因此编译 C 语言代码的函数时不会带上函数的参数类型,一般只包括函数名。 这个功能十分有用处,因为在 C++ 出现以前,很多代码都是 C 语言写的,而且很底层的库也是 C 语言写的,为了更好的支持原来的 C 代码和已经写好的 C 语言库,需要在 C++ 中尽可能的支持 C,而 extern "C" 就是其中的一个策略。
6.switch(c)语句:
switch语句后的控制表达式只能是short、char、int、long整数类型和枚举类型,不能是float,double和boolean类型。
7.指针数组与数组指针:
int * ptr[4] 是指针数组。[]的优先级高于* 所以ptr先与[]结合形成一个数组定义,数组名为ptr ,然后剩余部分int *代表的就是数组中存放的类型,也就是:一个ptr的数组包含了4个指向int类型的指针。
int (* ptr) [4] 是数组指针。 ()的优先级高于[] ,括号内*与tr结合形成指针定义,指针变量名为ptr , 剩余部分构成该指针的类型:int [4] 一个匿名数组,也就是:一个指针ptr变量指向了一个包含4个Int的数组。
8.字符串数组与字符串变量的区别:
9.this指针:
this是指向实例化对象本身时候的一个指针,里面存储的是对象本身的地址,通过该地址可以访问内部的成员函数和成员变量。 为什么需要this?因为this作用域是在类的内部,自己声明一个类的时候,还不知道实例化对象的名字,所以用this来使用对象变量的自身
10.两层解引用:**pp中pp,*pp,**pp指代的内容
11.哈希表:快速判断一个元素是否出现在集合里
1.建立哈希表:unordered_map<int,int>A;头文件#include<unordered_map>
2.初始化赋值:
3.插入元素:
4.成员函数:
5.哈希表的遍历:
12.字符串:
1.常用功能:
2.字符串的输入:
遇到空格表示该次输入停止,转到下个字符串赋值。
当按下空格后还能继续输入,但最终存到字符串中的只是第一个空格之前输入的字符串
使用getline(cin,对象名)可以读取空格
输入时遇到空格或回车将停止。
getline与cin>>如何处理空白字符
3.字符串函数:
strcat:
strcat(char[],const char[]);
将第二个字符数组中的字符串连接到前面字符数组的字符串的后面。第二个字符数组被指定为const,以保证该数组中的内容不会在函数调用期间修改。连接后的字符串放在第一个字符数组中,函数调用后得到的函数值,就是第一个字符数组的地址。
strcpy:
strcpy(char[],const char[]);
将第二个字符数组中的字符串复制到第一个字符数组中去,将第一个字符数组中的相应字符覆盖
strcmp:
strcmp(const char[],const char[]);
比较两个字符串
- 如果字符串1=字符串2,函数值为0。
- 如果字符串1>字符串2,函数值为一正整数。
- 字符串1<字符串2,函数值为一负整数
- 出现不相同的字符,则以第一个不相同的字符的比较结果为准
strlen:
strlen(const char[]);
求长度。
13.顺序栈和链栈:
1.栈的基本操作:
14.string类对象:
1.初始化方式:
直接初始化与拷贝初始化:
使用等号初始化一个变量为拷贝,不使用等号则是直接初始化
string s1 = "hello,world";//拷贝初始化
strings1("hello,world");//直接初始化
2.string对象的操作:
3.读取操作:string对象会自动忽略开头的空表(空格,换行,制表)并从第一个真正的字符开始读起,直到遇到下一处空白为止。
4.字符值与string对象相加:
5.用于单独处理string对象中的字符的标准库函数:头文件#include<cctype>
6.处理string对象的每个字符:(想要改变string对象中字符的值,必须把循环变量定义改成引用)
for(auto &c:str)
auto的作用是自动推测对象的数据类型,省去了识别对象类型这一步;
假设string s(”hello,world“)
for(auto c:s)与for(char c:s)效果等同。
7.迭代: