待解决:
*p ++
和 *(p++)
又搞不清楚了。。。之前写的几个机试专题:
之前整理的两个蓝桥杯blog:
几个常用模板:
dfs模板:把蓝桥杯那个专题的题多敲几遍就ok
最小生成树模板
最短路径模板
树的遍历模板
求二叉树高度
求二叉树叶子个数
二叉树、递归非递归扭转
注意点整理:
printf("%04d-%02d-%02d\n",y,m,d);
int getArrayLength(T arr[]) {
int length = sizeof(arr)/sizeof(T);
return length;
}
void swap(int &a,int &b){
int temp=a;
a=b;
b=temp;
}
C++格式输出控制:setprecision(n)与setiosflags(ios::fixed)或者setiosflags(ios_base::fixed)合用,可以控制小数点右边的数字个数
fill函数与memset函数比较
1,memset函数
按照字节填充某字符
在头文件< cstring >里面
2,fill函数
按照单元赋值,将一个区间的元素都赋同一个值
在头文件< algorithm>里面
for(auto &c:s)与for(auto c:s)
#include
using namespace std;
int main()
{
string s("hello world");
for(auto c:s)
c='t';
cout<<s<<endl;//结果为hello world
for(auto &c:s)
c='t';
cout<<s<<endl; //结果为ttttttttttt
#include
#include
using namespace std;
char op(char ch)
{
if(ch>='A'&&ch<='Z')
return ch+32;
else
return ch;
}
int main()
{
string first,second;
cin>>first;
second.resize(first.size());
transform(first.begin(),first.end(),second.begin(),op);
cout<<second<<endl;
return 0;
}
字符串/字符数组相关知识点
#include
之后用 getline(cin,input_string);
str.length()
或者str.size()
char b[]={'h','e','l','l','o'};//声明字符数组,长度为5
char定义字符串
字符串的优势在于输入、输出和赋初值,输入输出不需要使用循坏。字符数组需要用循环依次输出每个字符。
char b[]="hello";//定义字符串
char *p = b;
cout << b;//输出的是hello
cout<< *p;//指针指向首地址,所以输出为 h
string str="hello world";
string *p1 = &str; //注意必须加取地址运算符 &
cout << str << "," << *p1; //输出的是 hello world,hello world
1 如果想访问string定义字符串中的每个字符,可以使用 str[i]
2 cout<
在C/C++中常用的获取字符串长度或者字符串数组长度的函数有:
size()、length()、strlen()、sizeof()
字符串长度:strlen(str)、str.length()、str.size()
str.length()和str.size()是用于求string类对象的成员函数,求得的是实际的字符串长度;
strlen(str) 是用于求实际字符串数组的长度,其参数是char*,头文件为string.h。
sizeof用于求得的为字符串长度+1.对于字符数组,strlen()和sizeof()求得的结果相同.
strlen不区分是数组还是指针,就读到\0为止返回长度。而且strlen是不把\0计入字符串的长度的
vector头文件的push_back函数,在vector类中作用为在vector尾部加入一个数据。
string中的push_back函数,作用是字符串之后插入一个字符。
字符数组提取最后一个字母要减去‘0’ s[len-1]-'0'
字符串带空格输入 用getline(cin , s1);
将数字转换成字符串#include
,to_string
函数
c_str() 以 char* 形式传回 string 内含字符串
如果一个函数要求char*参数,可以使用c_str()方法:
string s = “Hello World!”;
printf("%s", s.c_str()); //输出 “Hello World!”
参考:
sort排序用法
#include
用法:Sort(起始地址,结束地址,排序方法),其中第三个参数可以不写,默认升序。sort(num,num+N,cmp);
#include
greater表示内置类型从大到小排序,less表示内置类型从小到大排序。sort(a,a+10,greater());//快速排序
# include
#include
int main()
{
char str1[11]="Hello";
char str2[11]=" World";
char str3[11];
int length;
strcpy(str3,str1);
printf("复制后的字符串:%s\n",str3);
strcat(str1,str2);
printf("连接后的字符串:%s\n",str1);
length=strlen(str1);
printf("连接后的字符串长度:%d\n",length);
return 0;
}
//自己编
#include
#include
#include
//字符串长度
int mystrlen(const char* str)//const?
{
if(str==NULL)
return -1;
int len=0;
while(*str++!='/0')
{
len++;
}
return len;
}
//从strSrc复制到strDest
//其中strDest长度要大于strSrc的长度
char* mystrcpy(char* strDest, const char* strSrc)
{
if(strDest==NULL || strSrc==NULL)
return NULL;
if(strDest==strSrc)//考虑要周到
return strDest;
char *tmp=strDest;
while((*strDest++=*strSrc++)!='/0');
return tmp;
}
//连接两个字符串
char* myStrcat(char *str1,char *str2)
{
int len1=strlen(str1);
int len2=strlen(str2);
for(int i=0;i<len2;i++)
{
str1[len1+i]=str2[i];
}
str1[len1+len2]='/0';//一定记得最后一个加上/0
return str1;
}
int main()
{
char *q="abcdefg";
//strcpy_s(q,sizeof("123456"),"123456");
printf("%d\n",mystrlen(q));
printf("%d\n",strlen(q));
return 0;
}
vector
声明: vector
可用a[i]直接访问
a.push_back()
a.pop_back()
只能在尾端
a.size()
a.clear()
只会清数据,内存还在占用,所以可以用vector
vector也可以数据类型时自定义的结构体。
快速构造 10个1的vector数组
int n=10;
vector vect(n,1); //第2个数字不屑的话默认为0.
vector> vect2
可直接用vect2[i][j]
int n=5;
vector > vec2;
for(int i=0;i x(i+1,1);
vec2.push_back(x);
}
for(int i=0;i
set
集合不会出现重复元素
#include
#include
set c;
for(set::iterator it=c.begin();it!=c.end();it++)
{cout<<*it;}//不要用小于 set内部不一定连续
struct Node{
int x, y;
bool operator < (const Node &rhs) const {
if(x==rhs.x){//x相等的话 按y排 不然用x排
return y
映射表map
关键字集合(key),班级集合(value),只能从key找value。key唯一。
在C++中遍历map是按照关键字从小到大遍历的,这一点和set相同
map
m; 名为m的T1到T2的映射insert()
的时候一定要成对的make_pair(v1,v2)
插入,若key映射已存在,第二次映射即使t2不同也不会更新dict["Tom"]=3;
dict["tom"].count()
存在返回1,不存在返回0it->first
或者(*it).first
找key,second找valueclear()
清空,结构体也是要重载小于号的isdigit()
用来判断是否是0-9之间的数字,是就则返回true,否则返回null(0),头文件为#include
#include
pow() 函数用来求 x 的 y 次幂(次方),其原型为:double pow(double x, double y);#include
(C语言使用
) isalpha()
判断字符ch是否为英文字母,当ch为英文字母a-z或A-Z时,在标准c中相当于使用“isupper(ch)||islower(ch)”做测试,返回非零值(不一定是1),否则返回零。isupper()
判断是否是大写字母。队列
queue q
push()
出队pop()
front()
empty()
clear()
广度优先搜索
相当于一层层搜,需要用队列辅助实现。搜最短的一般用bfs,要定义结构体存储状态信息
栈 Stack
C++标准库中的Stack
#include
stack
方法 | 功能 | 参数类型 | 返回值类型 |
---|---|---|---|
push | 压入元素 | T类型 | / |
pop | 弹出元素 | / | / |
top | 返回栈顶元素 | / | T类型 |
empty | 栈是否为空 | / | bool类型 true表示空 |
size | 栈的元素个数 | / | 非负整数 |
动态规划
错排公式
f[n]=(f[n-1]+f[n-2])*(n-1);