本文主要涉及到 C++ 一些基本语法,在做 oj 时经常用到,特此记录。
字符和字符串
- 数字转字符串:std::to_string(int)
- 字符串转数字:std::stoi(string)
上面两个函数均需要 #include<string>
- 字符串可以用数组方式来访问
- 字符串长度可用其length()函数获取
- 字符串可以通过substr(i,n)方法来提取子字符串,表示从第i个字符开始提取n个字符(包括i)
- 字符串大小写转换:利用STL中的transform函数,见下面的例子
1 |
|
- 单个字符大小写转换
- 需要记住ASCII码中A-65,a-97
- 将char c从大写转为小写可以通过下面代码
1 | if(c>='A' && c<='Z') |
数组
初始化数组(不初始化时为随机的地址值)
- 方法一:直接用数值初始化,见下面代码
1
2
3int a[3]={1,2,3} //元素依次为1,2,3
int a[3]={0} //元素依次为0,0,0
int a[3]={1} //元素依次为1,0,0
采用这种方法初始化时如果{}里面的元素的个数小于数组长度,则不足长度的元素默认值为0
- 方法二:for循环
动态分配数组长度方法(一维)
- 方法一:通过vector实现,需要#include < vector >
- 方法二:通过malloc和free实现,如下面例子就初始化了一个长度为n的数组,且数组的值为从0到n-1(这个是继承了C分配内存的特性,C++可通过
new
和delete
来实现,见方法三)
1 | cin>>n; |
- 方法三:通过
new
和delete
来实现,见下面代码
1 | cin>>n; |
容器
vector
- 需要
#include <vector>
- vector的方法:
- vector中的元素可以以数组下标访问
- push_back( ) 将一个元素放到vector中
- vector.size( ) 获取vector的大小
- 查找元素t是否在vector中
1 | T t; |
- 其他方法(需要
#include <algorithm>
):- sort(vector.begin( ),vector.end( ) ) //针对vector数据类型的排序
- reverse(vector.begin( ),vector.begin( )+5 ) //针对vector数据类型的 反转 ,注意:reverse(vector.begin(),vector.begin()+5) 仅仅对5个元素进行reverse操作,不包括vector.begin()+5
map
- 需要
#include <map>
- 用数组下标的形式往map中添加元素和查找元素
- 当map的key为结构体类型时,可通过重载 < 来判断该如何排序,见下面的代码
1 |
|
- 遍历map
1 | map<T,T> m; |
输入输出
- printf函数格式化数字的输出
数字前补0到达指定位数:
- 如
1
2int a=3,b=4;
printf("%04d %05d %d",a,b,b) //输出为 `0003 00004 4`
- 如
可通过scanf从输入的一定格式的字符串中提取数字如:
1 | int year,month,day; |
- cin或cout的类型为string时需要include
- 结构体的数据类型可以是别的结构体,也可以是自身结构体的指针
- 结构体内部也可以放函数,函数可用来初始化一个结构体