万能头文件

几乎包含了常用的所有头文件,不过在国内oj中,poj,hdu 不支持这个函数,这几个oj的编译器问题,其他国外的oj,还有台湾的oj都支持,CF,Topcoder,CCFCSP也都支持

#include<bits/stdc++.h>

ios::sync_with_stdio(false)

ios::sync_with_stdio(false);

//这段语句可以来打消iostream的输入 输出缓存,可以节省许多时间,使效率与scanf与printf相差无几

int转string

ostringstream os; //构造一个输出字符串流,流内容为空  
int i = 12;  
os << i; //向输出字符串流中输出int整数i的内容  
cout << os.str() << endl;

string转int

  1. std::stoi/stol/stoll等函数
    cpp
    stoi(str, 0, 2); //将字符串 str 从 0 位置开始到末尾的 2 进制转换为十进制
  2. 标准库中atoi函数,对于其他类型也都有相应的标准库函数,比如浮点型atof(),long型atol()等等
    cpp
    string s = “12”;  
    int a = atoi(s.c_str());  
  3. 采用sstream头文件中定义的字符串流对象来实现转换
    cpp
    istringstream is(“12”); //构造输入字符串流,流的内容初始化为“12”
    int i;  
    is >> i; //从is流中读入一个int整数存入i中  

    ##分割字符串
    cpp
    void split(const string& s,vector<int>& sv,const char flag = ' ') {  
    //利用将字符串s绑定到输入流istringstream,然后利用getline进行切割  
        sv.clear();  
        istringstream iss(s);  
        string temp;  
        while (getline(iss, temp, flag)) {  
            sv.push_back(stoi(temp));  
        }  
        return;  
    }  

for循环输出容器的内容

int main() {  
    string s("123:456:7");  
    vector<int> sv;  
    split(s, sv, ':');  
    for (const auto& sb : sv) {//C11新特性,更方便地循环输出容器的内容  
        cout << sb << endl;  
    }  
    return 0;  
}  

常用输出格式控制

setprecision(n)可控制输出流显示浮点数的数字个数。
C++默认的流输出数值有效位是6,所以不管数据是多少,都只输出六位。
如果setprecision(n)setiosflags(ios::fixed)合用,可以控制小数点右边的数字个数。
setiosflags(ios::fixed)是用定点方式表示实数,setiosflags(ios::scientific)是用指数方式表示实数;如果合用,可以控制指数表示法的小数位数。

代码 | 含义
-|-
dec| 十进制
hex| 十六进制
oct| 八进制
setiosflags(ios::uppercase)| 十六进制大写输出
setiosflags(ios::lowercase)| 十六进制小写输出
setiosflags(ios::fixed)| 固定的浮点显示
setiosflags(ios::scientific)| 指数表示
setprecision(n)| 设置显示小数精度为n位
setfill(c)| 设置填充字符c
setw(n)| 设置域宽为n个字符
setiosflags(ios::left)| 左对齐
setiosflags(ios::right)| 右对齐
setiosflags(ios::skipws)| 忽略前导空白

STL的简单使用

vector<int>为例,其他容器、数据类型基本相同

vector<int> v= {1,2,3,,4,5,6,7};
v.push_back(8);//v={1,2,3,4,5,6,7,8};
vector<int>::iterator p;//迭代器p
p=v.begin();//*p=1;*next(p)=2;
p=v.end();//*prev(p)=8
string s="012345";
s.insert(3, "^");//s=012^345

getline

istream& getline (istream& is, string& str, char delim);

将流iscindelim分割存入str中。delim缺省值为换行符。
值的注意的是,当使用cin 读入数据后,有一个回车留在缓冲区,此时执行的第一个getline得不到数据。

作者 Assaultcore

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注