cpp
io
基本io
- 流提取符 >>,以空白字符或输入结束字符为终止
- cin
读入一个字符:
using namespace std;
char ch;
cin.get(ch);
读入未知个数的字符:
char ch;
while(cin.get(ch)){
}
读入未知个数的数字:
int n;
while(cin>>n){
}
读入固定格式的坐标,固定格式为: (0,0),(1,1)
char c;
int x1, y1, x2, y2;
cin >> c >> x1 >> c >> y1 >> c >> c
>> c >> x2 >> c >> y2 >> c;
- 流插入符<<,用于输出
文件io
- include fstream头文件,以用于文件操作
- fin:对文件中的内容进行读操作 【从硬盘–>缓冲区】
- fout:对文件内容进行写操作【从缓冲区-硬盘】
用fin读文件:
#include<fstream>
ifstream fin("file_name")
//一次读取一个字符
char ch;
ch=fin.get();
//逐词读取, 词之间用空格区分
string s;
while(fin>>s){
}
//逐行读取,每次所读的是一个字符串,末尾无回车,但行内空格保留
string s;
while(getline(fin,s)){
}
//getline函数还可以有第三个参数,表示读到什么字符串时结束读取,则下一个getline从该字符串后接着读取
读文件的错误检测:
if(!fin.is_open()){
}
else{
}
用fout写文件:
#include<fstream>
ofstream fout("\\\\Mac\\Home\\Desktop\\cpp tests\\1\\Q149\\a.txt");
fout << ("hello world");
fout<<12;
//连着写会追加
fout.close();
string
- 获取字符串中的单个字符
str[index]
str.at(index);
- 子串查找
str.find("ab"); // 从前向后的第一个 ab
str.find("ab", 2); // 从下标 2 开始的第一个 ab
//若没有找到,则返回string::npos
- 获取子串
string s2 = s.substr(pos, n);
// 与 Java 不同:从 pos 开始取 n 个字符
- 字符串比较
s1.compare(s2) 相等时返回 0;
s1 < s2 时返回 -1;
s1 > s2 时返回 1。
或者利用==,<,>等进行比较 - 字符串与数值之间转换
int v = std::stoi(str);
//字符串转换为 long、long long、float 和 double 分别为 stol、stoll、stof 和 stod
string s = std::to_string(42);
//数值转换为字符串
- split
cpp中没有专门的split函数,需要手动写,会用到vector(类似于java中的arraylist)
#include<iostream>
#include<string>
#include<vector>
#include<cmath>
using namespace std;
vector<string> split(const string &s,const string &delim) {
vector<string> ans;
int begin = 0;
while (begin < s.length()) {
int end = s.find(delim, begin);
if (end == string::npos) {
ans.push_back(s);
break;
}
else {
if (end - begin == 0)
end++;
ans.push_back(s.substr(begin, end - begin));
begin = end+delim.length();
}
}
return ans;
}
内联函数inline
- 目的:“这么说吧,程序在编译器编译的时候,编译器将程序中出现的内联函数的调用表达式用内联函数的函数体进行替换,而对于其他的函数,都是在运行时候才被替代。”
- 实现:
inline int Max(int x, int y)
{
return (x > y)? x : y;
}
编译系统将在调用点替换相应的代码。
- 限制:递归,函数指针。
- 适用:使用频率高,简单小段的代码。
- 不能有循环和switch。
代码量过大的危害:cache命中率降低,破坏局部性原则;
循环指令的危害:造成虚拟内存的抖动,病态地换页。 - 只是对编译系统的提示,是一个申请,如果申请不合理,将有可能被拒绝,造成伤害