1、endl介绍
endl会输出'\n'(题外话,\n是转义字符,字符字面值常量的一员,很多语言都支持,不是C专有),然后立即刷新缓冲区并输出到屏幕上。由于要刷新缓冲区,endl会比\n慢一点,一般不建议使用。(cout>>a>>endl)endl 最后一个字符是字母“l”,而非阿拉伯数字“1”,它是“end of line”的缩写。
2、cin和cout输入输出
在C语言中,使用 scanf 和 printf 来对数据进行输入输出操作。而在C++语言中,C语言的这一套输入输出库仍然能使用,但是 C++ 又增加了一套新的、更容易使用的输入输出库cin和cout。使用 cout 进行输出时需要紧跟<<
运算符,使用 cin 进行输入时需要紧跟>>
运算符,这两个运算符可以自行分析所处理的数据类型,因此无需像使用 scanf 和 printf 那样给出格式控制字符串。
3、algorithm库
1.非修改性顺序操作(12个)
循环:对序列中的每个元素执行某操作 for_each()
查找:在序列中找出某个值的第一次出现的位置 find() 利用底层元素的等于操作符,对范围内的元素与输入的值进行比较。当匹配时,结束搜索,返回该元素的一个 InputIterator 。
b.find(a);这句代码的意思就是从b字符串中查找a字符串。返回值是字母在母串中的位置(下标记录),如果没有找到,那么会返回一个特别的标记npos.
在序列中找出符合某谓词的第一个元素 find_if()
在序列中找出一子序列的最后一次出现的位置 find_end()
在序列中找出第一次出现指定值集中之值的位置 find_first_of()
在序列中找出相邻的一对值 adjacent_find()
计数:在序列中统计某个值出现的次数 count()
count函数
algorithm头文件定义了一个count的函数,其功能类似于find。这个函数使用一对迭代器和一个值做参数,返回这个值出现次数的统计结果。
编写程序读取一系列int型数据,并将它们存储到vector对象中,然后统计某个指定的值出现了多少次。也可以读取字符串中某个字母的个数,不过字母要用单引号,不是双引号。
核心代码:
cout<<count(ivec.begin() , ivec.end() , searchValue)
在序列中统计与某谓词匹配的次数 count_if()
比较:找出两个序列相异的第一个元素 mismatch()
两个序列中的对应元素都相同时为真 equal()
搜索:在序列中找出一子序列的第一次出现的位置 search()
在序列中找出一值的连续n次出现的位置 search_n()
2.可变顺序操作(27个)
复制:从序列的第一个元素起进行复制 copy()
从序列的最后一个元素起进行复制 copy_backward()
交换:交换两个元素 swap()
交换指定范围的元素 swap_ranges()
交换由迭代器所指的两个元素 iter_swap()
变换:将某操作应用于指定范围的每个元素 transform()
替换:用一个给定值替换一些值 replace()
替换满足谓词的一些元素 replace_if()
复制序列时用一给定值替换元素 replace_copy()
复制序列时替换满足谓词的元素 replace_copy_if()
填充:用一给定值取代所有元素 fill()
用一给定值取代前n个元素 fill_n()
生成:用一操作的结果取代所有元素 generate()
用一操作的结果取代前n个元素 generate_n()
删除:删除具有给定值的元素 remove()
删除满足谓词的元素 remove_if()
复制序列时删除具有给定值的元素remove_copy()
复制序列时删除满足谓词的元素 remove_copy_if()
唯一:删除相邻的重复元素 unique()
复制序列时删除相邻的重复元素 unique_copy()
反转:反转元素的次序 reverse()
复制序列时反转元素的次序 reverse_copy()
环移;循环移动元素 rotate()
复制序列时循环移动元素 rotate_copy()
随机:采用均匀分布来随机移动元素 random_shuffle()
划分:将满足某谓词的元素都放到前面 partition()
将满足某谓词的元素都放到前面并维持原顺序stable_partition()
3.排序和关系操作(27个)
排序:以很好的平均效率排序sort (first, last),默认进行升序排序。对容器或普通数组中 [first, last) 范围内的元素进行排序,默认进行升序排序。升序:sort(begin,end,less<data-type>());
降序:sort(begin,end,greater<data-type>()).
排序,并维持相同元素的原有顺序 stable_sort()
将序列的前一部分排好序partial_sort()
复制的同时将序列的前一部分排好序 partial_sort_copy()
第n个元素 将第n各元素放到它的正确位置 nth_element()
二分检索 找到大于等于某值的第一次出现 lower_bound()
找到大于某值的第一次出现 upper_bound()
找到(在不破坏顺序的前提下)可插入给定值的最大范围 equal_range()
在有序序列中确定给定元素是否存在 binary_search()
归并:归并两个有序序列 merge()
归并两个接续的有序序列 inplace_merge()
有序结构上的集合操作 一序列为另一序列的子序列时为真 includes()
构造两个集合的有序并集 set_union()
构造两个集合的有序交集 set_intersection()
构造两个集合的有序差集 set_difference()
构造两个集合的有序对称差集(并-交) set_symmetric_difference()
堆操作:向堆中加入元素 push_heap()
从堆中弹出元素 pop_heap()
从序列构造堆 make_heap()
给堆排序 sort_heap()
最大和最小 两个值中较小的 min()
两个值中较大的 max()
序列中的最小元素 min_element()
序列中的最大元素 max_element()
接收参数:容器的首尾地址(迭代器)(可以是一个区间)
返回:最值元素的地址(迭代器),需要减去序列头以转换为下标
*max_element()与*min_element()分别用来求最大元素和最小元素的值。
接收参数:容器的首尾地址(迭代器)(可以是一个区间)
返回:最值元素的值
词典比较 两个序列按字典序的第一个在前 lexicographical_compare()
排列生成器 按字典序的下一个排列 next_permutation()
按字典序的前一个排列 prev_permutation()
原文链接:https://blog.csdn.net/qq_38251358/article/details/113105746
4、C++标准库之iomanip库(格式输入输出)
参考: 【C++】C++标准库之iomanip库(格式输入输出)_Jacky_Feng的博客-CSDN博客
控 制 符 作 用
dec 设置整数为十进制
hex 设置整数为十六进制
oct 设置整数为八进制
setbase(n) 设置整数为n进制(n=8,10,16)
setfill(c) 设置字符填充,c可以是字符常量或字符变量
setprecision(n) 设置浮点数的有效数字为n位
setw(n) 设置字段宽度为n位
setiosflags(ios::fixed) 设置浮点数以固定的小数位数显示
setiosflags(ios::scientific) 设置浮点数以科学计数法表示
setiosflags(ios::left) 输出左对齐
setiosflags(ios::right) 输出右对齐
setiosflags(ios::skipws) 忽略前导空格
setiosflags(ios::uppercase) 在以科学计数法输出E与十六进制输出X以大写输出,否则小写。
setiosflags(ios::showpos) 输出正数时显示"+"号
setiosflags(ios::showpoint) 强制显示小数点
resetiosflags() 终止已经设置的输出格式状态,在括号中应指定内容
5、Condition ? X : Y
Condition ? X : Y | 条件运算符。如果 Condition 为真 ? 则值为 X : 否则值为 Y。 |
, | 逗号运算符会顺序执行一系列运算。整个逗号表达式的值是以逗号分隔的列表中的最后一个表达式的值。 |
6、long int与long long的区别
long int即long,给人的感觉好像是长整型,但实际上,它和int一样,只有32位。 long long则不同,long long是C++的64位整型的基本类型,“现任”长整型。
7、sizeof(object)
sizeof(object) 是一个关键字,它是一个编译时运算符,用于判断变量或数据类型的字节大小。
sizeof 运算符可用于获取类、结构、共用体和其他用户自定义数据类型的大小。
8、getline()
getline()
// 接受一个字符串,可以接收空格并输出,需包含“#include<string>” ,和cin.getline()类似,但是cin.getline()属于istream流,而getline()属于string流,是不一样的两个函数
istream& getline (istream& is, string& str, char delim);
is :表示一个输入流,例如 cin。
str :string类型的引用,用来存储输入流中的流信息。
delim :char类型的变量,所设置的截断字符;在不自定义设置的情况下,遇到’\n’,则终止输入。
cin.get()
用法1: cin.get(字符变量名)可以用来接收字符
用法2:cin.get(字符数组名,接收字符数目)用来接收一行字符串,可以接收空格
cin.getline() // 接受一个字符串,可以接收空格并输出
cin.getline()函数的完整形式有三个参数:cin.getline(字符数组名,字符个数,结束标志)
9、string常用函数
①append函数用在字符串的末尾添加字符和字符串,功能用法类似python的append函数
参考:c++中 append()函数用法_c++ append-CSDN博客
string& append (const string& str):
在字符串的末尾添加字符串str。
string& append (const char* s):
在string的末尾添加C-string。把c类型字符串s连接到当前字符串结尾
string& append (const string& str, size_t subpos, size_t sublen):
在字符串的末尾添加字符串str的子串,子串以subpos索引开始,长度为sublen。若是添加的子串中只有索引开始的位置,没有长度,则表示字符串从第n个字符到末尾
的字符连接到当前字符串末尾
10、指针
11、sizeof()
sizeof (data type)
sizeof 是一个关键字,它是一个编译时运算符,用于判断变量或数据类型的字节大小。
sizeof 运算符可用于获取类、结构、共用体和其他用户自定义数据类型的大小。返回的是变量声明后所占的内存数
其中,data type 是要计算大小的数据类型,包括类、结构、共用体和其他用户自定义数据类型。
若其中是表达式,或函数,对象,则结果是表达式值类型大小,函数返回值类型大小,对象类型大小。
12、c++标准库之cstring
string、string.h和cstring的区别是很大的。string.h是c语言的库,用于处理char *类型的字符串。string和cstring是c++标准库的东西,位于std名字空间。string是c++标准库中的一个类,它实际上是basic_string模版类实例化产生的。cstring兼容了过去string.h的函数,但是采用了c++的写法。最后CString和cstring还有区别前者是mfc中的一个类。
strlen() 可以得到字符数组中第一个\0前的字符的个数,格式如下:
strlen(字符数组);
CString str("hello");
cout << str.GetLength() << endl;//得到字符串长度,不包括'\0'
cout << str.GetAt(4) << endl;//得到单个字符下标
cout << str.IsEmpty() << endl;//判断字符串是否为空,1为空,0不为空
str.SetAt(4,'w');//设置下标单个字符
cout << str << endl;
cout << str.Mid(2,2) << endl;//从第二个位置获取后两个字母
cout << str.Left(3) << endl;//从左边第三个往左边获取三个字母
cout << str.Right(3) << endl;//从右边第三个往右边获取三个字母
cout << str.MakeUpper() << endl;//将字符串全部转换成大写
cout << str.MakeLower() << endl;//将字符串全部转换成小写
cout << str.MakeReverse() << endl;//将字符串倒序
13、C++中的动态数组
参考:C++ 动态数组(new)_c++ new数组-CSDN博客
- 动态数组的维度可以为常量、也可以为一个函数的返回值
- 使用typedef为数组类型取别名
typedef int arrT[42]; int *p=new arrT; //分配一个大小为42的int型数组
- 默认情况下,new分配的对象都有默认初始化
int *p1=new int[10]; //10个未初始化的int int *p2=new int[10](); //10个初始化为0的int string *p3=new string[10]; //10个空的string string *p4=new string[10]();//10个空的string
- C++11标准:花括号初始化器初始化
int *p1=new int[5]{0,1,2,3,4}; string *p3=new string[3]{"a","the",string(3,'x')};
动态数组的释放
- 使用delete释放,并且在数组名前需要加上“[]”
- 释放的顺序:数组中的元素按照逆序销毁,即最后一个元素首先被销毁,然后倒数第二个....以此类推
typedef int arrT[10]; int *p=new arrT; delete []p
定义指针指向二维数组
为了方便根据用户输入动态定义二维数组的行和列,引入变量rowsNum(行),colsNum(列)。
以定义5行4列的二维数组为例,
int rowsNum = 4; int colsNum = 5; float** a = new float*[rowsNum]; for(int i = 0; i < rowsNum; i++) { a[i] = new float[colsNum]; }
14、字符串分类统计
isalpha():判断字符是否为字母
isdigit():判断字符是否为数字
isspace():判断是否为空格、字表符、换行等标准空白;
isalnum():判断字符是否为字母或者数字;
ispunct():判断字符是否为标点符号;
islower():判断字符是否为小写字母;
isupper():判断字符是否哦为大写字母。