cin&cout
- 输入到文件末尾,语句: while(cin>>a)
- cin输入可以自动刷新缓冲区
- cout 的专用回车:endl
- 输入字符串带空格即止,如果要输入带空格的字符串,用gets(),若输入的是string类型字符串str,则getline(cin,str),输入空格用getchar()
- 速度慢,高效输入输出还是要用 scanf 和 printf ,循环中也尽量少用cin cout
string
- 这是个数据类型,此数据类型的字符串与其它变量一样,都可以用 = 赋值,用==,!= 来比较大小,用+往后加东西,甚至可以用 > < 来按字典序比较大小。基本上其它类型变量能做的它也都可以
- string类型字符串既可以当作一个整体的string类型变量,又可以作为一个char类型数组,char[]能做的它也都能做,cstring里的库函数也都能用
- 最初定义时无空间,不可直接初始化。
- 最终输入完后同样自动加’\0’
- 以下str全部为字符串名,可以替换为a,b,duohereshui等自定义名字
str.size() 返回值为字符串长度 - str.begin() , str.end() 分别为指向首尾元素的指针
- str.empty()返回值为bool类型,判断是否为空
- str.clear() 清空字符串
- str.swap(str1) 交换两字符串的值,括号中参数为另一字符串名,不可为常量
- str.substr(index,num) 返回值为str的一个字串,下标为index的字符作第一个,向后num个字符
- str.erase(index,num) 将下标为index的字符作为第一个,向后删num个 ;str.erase(index) 删除从下标index向后的所有字符
- str.insert(index,str1) 将str1从index插入(index为插入的str1的第一个字符的下标)
sort
- 默认从小到大排序,此时可省略comp函数
- 只可排连续内存的一串变量,例如数组。不可排链表
- 若要从大到小排,则自定义comp函数:
bool comp(int a,int b)//可以是其它数据类型
{
return a>b;
}
- 还可以设置排序的第一参考值,第二参考值等等(类似excel里的排序?)
bool comp(point a,point b)
{
if(a.x!=b.x)
return a.x>b.x;//按x降序
else return a.y<b.y;//按y升序
}
algorithm
- reverse颠倒序列
(1)reverse(str.begin(),str.end());颠倒string类型字符串
(2)reverse(a,a+m);颠倒数组 - swap 交换的两个必须为同一数据类型的变量
- lower_bound与upper_bound 必须查找顺序序列,得到的是第一个大于等于所查找数的位置和第一个大于所查找数的位置
用法:lower_bound(address1,address2,element)address1,address2分别为查找的起止位置,element为要查找的元素
lower_bound(address1,address2,element)-address1 为元素下标
upper_bound(address1,address2,element) - lower_bound(address1,address2, element)为你所查找的元素的总个数
若找不到:返回address2+1 - binary_search 看数组中是否存在查找的值,若不存在,返回值为true or false
用法: binary_search(address1,address2,element) - unique 删除相邻的重复元素
用法: unique(address1,address2)
函数默认值
函数定义时,可在参数表中添加默认值,这样传参时可以不传它,注意,无默认值的参数一定要在有默认值的参数右边,否则会造成编译错误。
pair
- 头文件:utility
- 格式:pair < type1 ,type 2> ;这样这个整体为一个新的数据类型,可以typedef一下把它的名字改了,方便打
- pair第一个元素first,第二个second,整个pair可以比较大小,先first,后second
vector
- vector< type > 可以理解为 定义一个装有type型数据的容器, 这个整体是个新的数据类型
- 也可以和数组一个用法
- 最初定义时无内存,往里面添加东西需要push_back,不可直接赋值,也可以在最初定义时就写上(n)表示给n个空间,例如vector< int > vec(n)。有空间后可以赋值但无法改变空间大小;
- 引用
typedef vector<int> vi;
void sum(vi &x)
{
}
int main()
{
vi vec;
sum(vec);
}
将vec数组传进函数,重新起名为x进行运算,改变x后vec也发生变化。但是不拷贝,比一般传参要快
5. v2.resize(v1.size()) 将v2的大小变得和v1一样,不过可能切断原序列
6. begin,end含义同string,front,back为指针
7. sort 可以直接为vector 内元素排序
格式sort(vec.begin(),vec.end(),comp)
map
- #include< map>
- map<type1,type2> 定义一个type1到type2的映射,type1不可重复,type2为实值可以重复
- map<char,int> m;
m[‘c’]=1; - for(auto x:m){}语句
x为一个数据类型可变的东西,依次遍历m中的元素,直到结尾。比如x可以在第一次循环中做m[1],第二次循环中作m[2]
auto的含义是数据类型可根据变量发生变化,可以int,可以double等等
memset
初始化函数,格式为memset(num,sizeof(int),n)
第一个参数为需要初始化的数组
第二个参数为初始化的字节数
第三个参数为十六进制数或一个字符,是要初始化成的东西
注意数少时才这么用。数组元素过多时还是挨个赋值更节省时间