一、头文件及其使用
#include ‘algorithm’
-
lower_bound()
<–利用二分法找到大于等于某值的第一次出现–>
<–在数组a中找到大于等于m的第一次出现–>
e.g. lower_bound(a, a + n, m)
-
sort(a[29], a[29] + 30);
<–两个参数为默认升序,第三个参数在最后,为函数名,自定义升降–>
-
reverse(&a[0], &a[30]);
<–反转数组a下标从0到30的数–>
#include ‘sstream’
void i2s(int i, string &s) //进行类型转换
{
stringstream ss;
ss << i;
ss >> s;
}
i2s(a, _a);
_a.length() //利用length()函数求得字符串a的长度
#include ‘cstring’
char s[100];
cin >> s;
strlen(s);
STL库
1、set容器
#include <algorithm> //对应调用find函数
#include <set> //set容器中元素自动排升序,去重
set<int> su;
su.insert(2); //插入2
su.find(m) == su.end() //没有找到m
/* while循环使用迭代器输出,其中iter为指针 */
set<int>::iterator iter = ans.begin();
while(iter != ans.end())
{
cout << *iter << endl;
iter++;
}
/* for循环使用迭代器输出 */
for(set<int>::iterator iter = ans.begin(); iter != ans.end(); iter++)
{
cout << *iter << endl;
}
2、vector容器
#include <vector> //向量容器可动态分配内存
vector<int> ans;
ans.push_back(100); //插入100
ans.push_back(90); //尾部插入90
ans.push_back(200); //尾部插入200
ans.pop_back(); //删除最后一个元素
vector<int>::iterator iter = ans.begin();
while(iter != ans.end()) //按插入顺序输出
{
cout << *iter << endl;
iter++;
}
//vector的输出也可以:
cout << ans[1] << endl;
3、map容器
#include <map> //映射的函数关系
map<int, int> cnt
/* 例如记录余数 */
// s[i] = (s[i - 1] + a[i]) % k;
// cnt[s[i]]++;
二、单个字符
char a;
-
scanf(" %c",&a); <–注意留个空格–>
printf("%c",a);
-
cin >> a;
cout << a;
-
a = getchar();
putchar(a);
一般情况用1、2
录入只能英文
三、读取字符串
char s[100];
-
scanf("%s", s); <–s前面可以带&–>
-
cin >> s;
-
gets(s); <–不推荐–>
-
cin.get(s, 100);
-
fgets(s, 99, stdin) <–数组最后一个是\0–>
len = strlen(s) - 1 <–fgets函数会录入输入时的回车–>
一般情况用1、2
录入中英文皆可,注意1、2不能接受空格
杂碎点
1. long long类型最好放在函数外面,特别是long long a[30][30]这类,必须放在函数外
2.
int a[N][N];
memset(a, 0, sizeof(int) * N * N); //需头文件#include <cstring>
这段代码表示,将二维数组a中所有数字初始化为0
3. 调用长度函数:
① char s[100] 对应 strlen(s)
② string s 对应 s.length()
③ int a[ ] 对应 sizeof(a) / sizeof(int)
若输入s,遇空格即停止记数;
若定义char s[100] = “abc de”,则strlen(s) = 6
同理,string s = “abc de”,则s.length() = 6
4. #include <bits/stdc++.h> 是一个万能头文件,包含所有可用到的C++库函数