C++好用的模块
C++好用的模块
一览
整体模板:
#include <iostream>
#include <cstdlib>
#include <cstdio>
#include <cmath>
#include <cstring>
#include <algorithm>
#include <string>
#include <sstream>
#include <map>
#include <vector>
#include <set>
using namespace std;
const int maxn = 10005;
int main()
{
int n;
scanf("%d", &n);
while(n--)
//while (~scanf("%d", &n) && n)
//while (~scanf("%d", &n))
{
}
return 0;
}
头文件解析:
// C语言的基本头文件
#include <cstdlib>
#include <cstdio> // 输入输出
#include <cmath> // 数学
#include <cstring> // 字符
// C++算法
// 常用的有sort(a, a + n, cmp)
#include <algorithm>
// 映射
// 类似于Python中的dict
// 声明:
// map<string, int> a; string到int的映射
// 方法:
// 直接赋值a[b] = 1
// 迭代的时候对于指针maap,maap->first就是key,maap->second就是value
#include <map>
// 不定长数组
// 声明:
// vector<int> a; 一维不定长数组
// vector<int> a[maxn]; 二维不定长数组, 第一维大小固定
// 方法:
// a.size()读取大小
// a.resize()改变大小
// a.push_back()向尾部添加元素
// a.pop_back()删除最后一个元素
#include <vector>
// 集合,里面不包含重复的元素
// 声明set<int> a;
// 方法:
// a.insert() 加入集合
// a.size() 集合大小
// a.begin() 集合开始指针
#include <set>
// C++的强大的字符类
// 读入一行
// string a;
// getline(cin, a)
// 直接流式读写
// cin >> s;
#include <string>
// 把字符串变成流来让string读入
// string line;
// getline(cin, line);
// stringstream ss(a);
// ss >> a; 直接把ss的内容也就是line读入到a中了
#include <sstream>
// C++的输入输出流,cin和cout就在这里面
#include <iostream>
说明
帮助最大的应该是string类了,对于字符串的处理方便多了,直接就过了一个直接看很麻烦的题,不过可能会超时。
相关方法:
- substr(开始的位置, 子串的长度) 返回值也是一个string类的字符串
- length()字符串长度
另外的就是set类了,对于统计字符串的种类方便多了,对,字符串!数字还好说。
流式操作也很方便
表示流入,例如cin>>a;输入流的数据流入a
- <<表示流出,总之两个都表示流的方向,例如cout<<a;a的数据流到输出流
- 还有stringstream可以把string变成流,对于那种一行有很多数据用空格隔开的简直不能更好用,但是时间也是一个问题
两个实例
剪花布条
一块花布条,里面有些图案,另有一块直接可用的小饰条,里面也有一些图案。对于给定的花布条和小饰条,计算一下能从花布条中尽可能剪出几块小饰条来呢?
分析:
用string类来构造字符串,然后调用string的find方法来寻找子字符串,一直这样做下去就可以了。注意的是,为了方便匹配完后把匹配出来的结果包括子串一起删除会更加方便。
string a, b;
if (a.find(b) != -1)
{
cnt++;
a = a.substr(n + b.length(), a.length() - b.length() - n + 1);
}
单词数
lily的好朋友xiaoou333最近很空,他想了一件没有什么意义的事情,就是统计一篇文章里不同单词的总数。下面你的任务是帮助xiaoou333解决这个问题。
分析:
这里就是上面说的,不用集合会很麻烦
set<string> dict;
stringstream ss(s);
while(ss >> buf)
dict.insert(buf);
printf("%d\n", dict.size());