洛谷OJ记录

记录一哈刷洛谷的一些技巧和函数


 

万能头文件#include<bits/stdc++.h>

  它几乎包含了你能用到的所有头文件。。。。

#include <iostream> 
#include <cstdio> 
#include <fstream> 
#include <algorithm> 
#include <cmath> 
#include <deque> 
#include <vector> 
#include <queue> 
#include <string> 
#include <cstring> 
#include <map> 
#include <stack> 
#include <set> 

  

用cout进行小数格式输出

  首先要加头文件:#include<iomanip>

setprecision、fixed、showpoint

cout<<setprecision(n)<<num; //输出n位数(包括整数),有四舍五入但是不会显示多余0比如1.1000输出1.1

cout<<showpoint<<setprecision(n)<<num;//输出n位数,并且会输出0,有四舍五入

cout<<fixed<<setprecision(n)<<num;//此时n指的是小数位数,有四舍五入,会输出多余0

  

https://blog.csdn.net/u011321546/article/details/9293547

 

<algorithm>下的sort()

sort( begin, end) / sort( begin, end , cmp)

不传递cmp时,默认是升序

bool cmp(int a, int b)
{
    return a > b;//实现降序或者其他顺序,当返回值为true时则进行交换
}
int main()
{
 
    int a[] = {1,3,7,2};
    sort(a,a + 4,cmp);//a+n表示 a之后n*sizeof( type )的内存地址
}

 STL的sort函数在数据量大时采用快排,将分段再递归排序,一旦分段后的数据小于某个值,就改用插入排序。如果递归层次过深,还会改用堆排序。这样就结合了各类算法的所有优点。

<vector>

vector是顺序存储的,支持随机存取,其实和数组没什么区别,只不过加了很多方法

vector的初始化、重分配、插入删除:

#include<algorithm>

vector<type> v;//声明,不分配内存
vector<type> v(n);//声明并分配n个sizeof(type)的内存
vector<type> v(num,value);//初始化num个值为value的vector v.capacity();//元素预定的上限,默认是元素个数+1 v.size();//当前元素数量 v.reverse(int n);//给v重新预约元素上限(v.capacity()),并不直接改变内存大小 v.resize(int n);//不仅把v.capacity变为n,还分配内存 v.push_back(type elem);//不管前面有没有空的地方,在末尾新分配一块内存存储 v.insert(iterator v.begin()+n , type elem);//新分配一个内存,从指向的元素开始把所有的都往后移,elem取代指向的元素位置 v.erase(v.begin()+n);//删除第n个元素,会重新生成一个vector v.erase(v.begin()+a , v.begin()+b);//从 a 位置开始删除到 b 前一个位置
1 //迭代器访问
2 vector<int>::iterator it;
3 for(it=vec.begin();it!=vec.end();it++)
4     cout<<*it<<endl;

 

<string>

这里面的门头就大了

#include<string>

string s = "1234";

s.erase( int pos, int n);//删除从pos 位开始的n个字符
s.erase( s.begin()+n );//删除指定位置的字符
s.erase( s.begin()+l, s.begin()+r );//删除从 left 位开始的到 right前一位的所有元素

s.find( string s);//返回子串s 第一次出现的下标,如果不存在,返回string::npos,这是一个unsigned int 的 -1,如果用一个整数变量接收它,那就能转化为int的-1

s1 < s2; // 按asc码序(字典序)进行比较
s1.compare(s2);//s1<s2,返回-1,s1==s2,返回0,s1>s2,返回1。 同理对于<string.h>中的strcmp(s1,s2)也是如此  

//字符串的反转
#include<algorithm>
reverse(str.begin(),str.end());

//字符串截取
s.strsub(pos);//截取pos 开始的后续所有字符
s.strsub(pos, n);//截取 pos 开始的后n 个字符

//字符串替换
s.replace(pos , n , s2);//用s2替换pos 开始后的n个字符

string和int的转化:

to_string( num );

#include<string>

int a = 111;
double b = 1.11;
string s = to_string(b);

  

atoi(),stoi() 包含在#include<string>,不是c++11的可以在#include<cstring>。作用是将字符串转化为int型。区别是stoi的形参是const string*,而atoi的形参是const char*。c_str()的作用是将const string*转化为const char*。

#include<string>

string s1("1234567");
char* s2 = "1234567";
int a = stoi(s1);
int b = atoi(s2);
int c = atoi(s1.c_str());

  

 

posted @ 2020-04-17 00:11  幽灵化石  阅读(244)  评论(0编辑  收藏  举报