- 引包相关:
abs 需要导入 #include <cmath>
2 动态数组相关
1)使用vector :
#include <vector>
vector<类型>名(大小); // 动态一维数组
// 动态m*n二维数组,注意两个 "> "之间要有空格!
vector< vector<int> > point(m, vector<int>(n) );
可以将坐标定义为一个结构,然后放在动态一维数组中
typedef struct {
int x;
int y;
}XY_Point;
vector<XY_Point>point(num); // 动态数组,将XY_Point类型的点存入动态一维数组
2)不使用vector来创建动态 m * n 二维数组:
int **matrix = new int*[m];
for (int k = 0; k < m; k++) {
matrix[k] = new int[n];
}
注:有些while情况下,每次需要清空一维/二维数组中的数据,可以利用
memset(数组名,初始化值,sizeof(类型));
3 类型转换相关:
1) Long转String
#include <sstream>
stringstream st;
long lNumber = 168; // 需要转换的long型数字
string str; // 转换成string
st << lNumber;
st >> str;
int d = (int)str.length();
cout << str.at(d - 1) << endl;
2)int 转 string 、string转int同理可用stringstream方法
或者使用itoa()函数:
// 将value转换为字符串存入string中,radix为转换时所用基数(保存到字符串中的数据的进制基数2、8、10、16)
char *itoa(int value, char *string, int radix);
4 将输入字符存入char*
char str[100];
while ( cin >> ws ) {
cin.getline(str, 100);
cout << str;
}
5 . 最大公约数/最小公倍数
int gcd (int a, int b)
{
return ( !b ) ? a : gcd(b, a%b); // 返回最大公约数
}
6 .alorithm头文件
// 对数组a给定区间内的元素进行排序,compare是比较子
bool compare(int a, int b)
{
return a > b;
}
sort(a,a+10,compare);
7 . map容器
1)Vector对于随机访问的速度很快,但是对于插入尤其是在头部插入元素速度很慢,在尾部插入速度很快。
2)Map,Set属于标准关联容器,使用了非常高效的平衡检索二叉树:红黑树,他的插入删除效率比其他序列容器高是因为不需要做内存拷贝和内存移动,而直接替换指向节点的指针即可。
Set和Vector的区别在于Set不包含重复的数据。Set和Map的区别在于Set只含有Key,而Map有一个Key和Key所对应的Value两个元素。
3)Map和Hash_Map的区别是Hash_Map使用了Hash算法来加快查找过程,但是需要更多的内存来存放这些Hash桶元素,因此可以算得上是采用空间来换取时间策略。
#include <map>
// 统计字符出现的次数
map<char,int> freq; // 键、值
for (int i = 0; input[i] != '\0'; i++)
freq[ input[i] ]++;