cpp language 语法
cpp language 语法
总览-思维导图

vector(动态数组)
1.在使用vector时,要使用相应的头文件
#include<vector>
2.创建数组
定义:vector<数据类型> v;v.resize(10);for(int i= 9=0;i < 10;i++)v[i] = i;for(int i =0;i < 10;i++)cout<<v[i];cout<<v.size()<<endl;//10v.push_back(10);//将10这个元素放在数组的最后,长度也会加一定义: vector<int> v(10,2);//创建十个元素空间,每一个元素初始化为2vector<int> v(10); = vector<int> v(10,0);//创建十个元素空间,每一个元素初始化为0
3.迭代器
#include<iostream>
#include<vector>
using namespace std;
int main()
{vector<int> box(10,2);box.push_back(11);for(auto p = box.begin();p != box.end();++p){cout<<*p<<" ";//*p 很重要,看好再写}
}
打印结果:2 2 2 2 2 2 2 2 2 2 11//此时begin指向数组的第一个元素,end指向数组最后一个元素的后面的第一个位置(不在数组中了)
set(集合)
1.在使用set时,要使用相应的头文件
#include<set>
2.使用
#include<iostream>
#include<set>
using namespace std;
int main()
{set<int> s;//创建集合s.insert(2);s.insert(1);s.insert(3);//往集合中储存数据for(auto p = s.begin();p != s.end();++p){cout<<*p<<" ";} //1 2 3cout<<endl;cout<<(s.find(2) != s.end())<<endl;//set.find() 返回的是指针 1cout<<(s.find(4) != s.end())<<endl;//0s.erase(1);cout<<(s.find(1) != s.end())<<endl;//0
}
set中的元素会自动按照从小到大的顺序进行排序
map(键值对)
1.在使用map时,要使用相应的头文件
#include<map>
2.使用
#include<iostream>
#include<map>
using namespace std;
int main()
{map<string,int> mymap;//定义键值对mymap["hello"] = 2;mymap["world"] = 3;mymap["hallo"] = 5;//输出根据ASCII码的顺序进行从小到大排列for(auto p=mymap.begin();p!= mymap.end();++p)cout<<p->first<<" "<<p->second<<endl; //first指的是string,second指的是intreturn 0; }
//打印结果
hallo : 5
hello : 2
world : 3
stack(栈)
1.在使用stack时,要使用相应的头文件
#include<stack>
2.使用
#include<iostream>
#include<stack>
using namespace std;
int main()
{stack<int> mystack;mystack.push(1);mystack.push(2);mystack.push(3);mystack.pop();//弹出顶部元素,出栈cout<<mystack.top()<<endl;//访问顶部元素cout<<mystack.size();//大小return 0; }
//打印结果
2
2
注意:栈不可以使用迭代器进行遍历,因为不存在begin和end
queue(队列)
1.在使用queue时,要使用相应的头文件
#include<queue>
2.使用
#include<iostream>
#include<queue>
using namespace std;
int main()
{queue<int> my;//定义,创建队列for(int i =1;i<=10;i++)my.push(i); //入队列cout<<my.front()<<endl;//访问队首 1cout<<my.back()<<endl;//访问队尾 10my.pop();cout<<my.front()<<endl;// 访问队首 2cout<<my.back()<<endl;//访问队尾 10return 0;
}
unordered_set 和 unordered_map
1.在使用时,要使用相应的头文件
#include<unordered_set>
#include<unordered_map>
2.使用
如果对于对于排序没有相应的要求,可以使用这两个来减少复杂度,防止运行超时
注意:但是在输出的时候,尽管是无序的,但是却不是输入的顺序

bitset(位运算)
1.在使用时,要使用相应的头文件
#include<bitset>
2.使用
#include<iostream>
#include<bitset>
using namespace std;
int main()
{bitset<5> b(19); cout<<b<<endl;//10011bitset<8> c("111");cout<<c<<endl;//00000111string m = "1111100101";bitset<5> d(m,0,5); //从m这个字符串中,下标为第0个元素开始 ,找长度为5个的位 cout<<d<<endl; //11111for(int i = 0;i < b.size();i++)cout<<b[i];//倒序输出,从最低位到最高位进行输出 11001cout<<endl; cout<<"是否存在1:"<<b.any()<<endl;//证明是存在1的 cout <<"是否不存在1:" <<b.none()<<endl;//证明是存在1的 cout<<"1的个数为:"<<b.count()<<endl; //3cout<<"b中元素的个数:"<<b.size()<<endl; // 5cout<<"下标为i的元素是不是1:"<<b.test(1)<<endl; //下标为1的元素是1b.flip(1);//将元素b[1]位置上的元素进行取反cout<<b<<endl; //10001unsigned long a = b.to_ulong(); //转换成数字 cout<<a<<endl; // 17return 0;
}
sort(排序)
1.在使用时,要使用相应的头文件
#include<algorithm>
2.使用
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
int main()
{vector <int> vv(10); //定义数组 for(int i = 10;i >= 1;i--)vv[10-i] = i; //初始化数组 for(int i = 0;i < 10;i++)cout<<vv[i]<<" ";//输出数组 10 9 8 7 6 5 4 3 2 1cout<<endl; sort(vv.begin(),vv.end());//排序 for(int i = 0;i < 10;i++)cout<<vv[i]<<" ";//输出数组 1 2 3 4 5 6 7 8 9 10return 0;
}
3.cmp自定义函数
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
bool cmp(int m,int n)
{return m>n;
}
int main()
{vector <int> vv; //定义数组 for(int i = 1;i <= 10;i++)vv.push_back (i); //初始化数组 for(int i = 0;i < 10;i++)cout<<vv[i]<<" ";//输出数组 1 2 3 4 5 6 7 8 9 10cout<<endl; sort(vv.begin(),vv.end(),cmp);//排序 ,加入自定义函数,让排序按照固定函数的方式进行排序 for(int i = 0;i < 10;i++)cout<<vv[i]<<" ";//输出数组 10 9 8 7 6 5 4 3 2 1 return 0;
}
注意:在自定义函数中,只允许使用> , < ,不允许使用 <= ,>=
#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;
struct stu{string name;int age;
};
bool cmp(stu a,stu b)
{if(a.age != b.age) //如果年龄不同,则由小到大进行排列return a.age < b.age;elsereturn a.name < b.name; //如果年龄相同,则根据ASCII码进行排序
}
int main()
{stu s[3];for(int i = 0;i < 3;i++){cin>>s[i].age>>s[i].name;}sort(s,s+3,cmp);for(int i = 0;i < 3;i++){cout<<s[i].name<<" "<<s[i].age<<endl;}return 0;
}
cctype头文件
#include<iostream>
#include<algorithm>
#include<cctype>
using namespace std;int main()
{char s = 'A';cout<<isalpha(s)<<endl;//1 是否是字母 cout<<islower(s)<<endl;//0 是否是小写字母 cout<<isupper(s)<<endl;//1 是否是大写字母 cout<<isalnum(s)<<endl;//1 是否是字母或者数字 cout<<isspace(s)<<endl;//0 是否是空格,\t \n \rchar s1 = tolower(s);cout<<s1<<endl; //achar s2 = toupper(s);cout<<s2<<endl; //Areturn 0;
}
cpp11特性
#include<iostream>
#include<algorithm>
using namespace std;int main()
{auto a = 10;cout<<a<<endl; auto x ="hello";cout<<x<<endl;return 0;
}
注意:在使用auto时,必须对变量进行初始化
#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;int main()
{vector<int> v(5,2);for(auto a:v)cout<<a<<" "; // 2 2 2 2 2cout<<endl;for(auto &b:v) //取地址可以对值进行更改b++;for(auto c:v)cout<<c<<" "; // 3 3 3 3 3return 0;
}
#include<iostream>
#include<algorithm>
#include<string>
using namespace std;int main()
{string s = to_string(123); //转换成为字符类型 cout<<s<<endl;printf("%s",s.c_str());return 0; }
#include<iostream>
#include<algorithm>
#include<string>
using namespace std;int main()
{int s = stoi("123");cout<<s-1<<endl; //122double s1 = stod("12.34"); cout<<s1-1; //11.34}
小知识点
优先队列的底层实际是堆排序 priority-queue <int,vector,greater>
第一个参数是数据类型,第二个参数是封装的数据,第三个是实现方式(从大到小排列)(less是从小到大排序)
q.size(),size()的方法返回的是unsigned int,如果两个方法相减结果还是无符号的,不会存在负数 !
超级玛丽游戏
#include<iostream>
// 引入输入输出流库,用于在控制台进行输入输出操作
using namespace std;
int main()
{// 主函数,程序的入口点cout<<R"( ********************####....#.#..###.....##....###.......###### ### ###........... #...# #...###*####### #.#.# #.#.#####*******###### #.#.# #.#.#...#***.****.*###.... #...# #...#....**********##..... ### ###....**** *****....#### ########## ######
##############################################################
#...#......#.##...#......#.##...#......#.##------------------#
###########################################------------------#
#..#....#....##..#....#....##..#....#....#####################
########################################## #----------#
#.....#......##.....#......##.....#......# #----------#
########################################## #----------#
#.#..#....#..##.#..#....#..##.#..#....#..# #----------#
########################################## ############ )";// 使用原始字符串 字面量 R"(...) 输出艺术图案// 原始字符串字面量以 R"(" 开头,以 ")" 结尾,其中的内容会原样输出,无需对特殊字符进行转义
}
#include<iostream>
#include <iomanip>
using namespace std;
int main()
{double a;int b;cin >> a >> b;cout << setprecision(3) <<fixed<< a / b << endl; //表示精确到小数点后三位cout << b * 2;return 0;
}
fixed 用于指定以固定小数点的形式输出浮点数,会让浮点数按照小数点固定的位置显示,即不使用科学计数法。
比如,对于数字 3.1415926 ,若没有 fixed ,当设置精度为3时可能输出 3.14e+0 这种科学计数法形式,使用 fixed 后则会输出 3.142
int* a,b; //前者是指针,后者是整数
//其实质是 int *a,b; * 是跟着变量的,如果想要定义两个指针,则应该是
int *a,*b;
//关于c++的引用应当也是这样的
int &a = 10,&b = 20;
