cpp language 语法

cpp language 语法

总览-思维导图

vector(动态数组)

1.在使用vector时,要使用相应的头文件

cpp 复制代码
#include<vector>

2.创建数组

cpp 复制代码
定义: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;//10

v.push_back(10);//将10这个元素放在数组的最后,长度也会加一

定义: vector<int> v(10,2);//创建十个元素空间,每一个元素初始化为2
      vector<int> v(10); = vector<int> v(10,0);//创建十个元素空间,每一个元素初始化为0

3.迭代器

cpp 复制代码
#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时,要使用相应的头文件

cpp 复制代码
#include<set>

2.使用

cpp 复制代码
#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 3
	cout<<endl;
	cout<<(s.find(2) != s.end())<<endl;//set.find() 返回的是指针 1
	cout<<(s.find(4) != s.end())<<endl;//0
	s.erase(1);
	cout<<(s.find(1) != s.end())<<endl;//0
}

set中的元素会自动按照从小到大的顺序进行排序

map(键值对)

1.在使用map时,要使用相应的头文件

cpp 复制代码
#include<map>

2.使用

cpp 复制代码
#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指的是int
	return 0; 
 } 
//打印结果
hallo : 5
hello : 2
world : 3

stack(栈)

1.在使用stack时,要使用相应的头文件

cpp 复制代码
#include<stack>

2.使用

cpp 复制代码
#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时,要使用相应的头文件

cpp 复制代码
#include<queue>

2.使用

cpp 复制代码
#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;//访问队首 1
	 cout<<my.back()<<endl;//访问队尾 10
	 my.pop();
	 cout<<my.front()<<endl;// 访问队首 2
	  cout<<my.back()<<endl;//访问队尾 10
	 return 0;
}

unordered_set 和 unordered_map

1.在使用时,要使用相应的头文件

cpp 复制代码
#include<unordered_set>
#include<unordered_map>

2.使用

如果对于对于排序没有相应的要求,可以使用这两个来减少复杂度,防止运行超时

注意:但是在输出的时候,尽管是无序的,但是却不是输入的顺序

bitset(位运算)

1.在使用时,要使用相应的头文件

cpp 复制代码
#include<bitset>

2.使用

cpp 复制代码
#include<iostream>
#include<bitset>
using namespace std;
int main()
{
      bitset<5> b(19); 
      cout<<b<<endl;//10011
      
      bitset<8> c("111");
      cout<<c<<endl;//00000111
      
      string  m = "1111100101";
	  bitset<5> d(m,0,5); //从m这个字符串中,下标为第0个元素开始 ,找长度为5个的位 
	  cout<<d<<endl;  //11111
	  
	  for(int i = 0;i < b.size();i++)
	   cout<<b[i];//倒序输出,从最低位到最高位进行输出 11001
	   
	   cout<<endl; 
	   cout<<"是否存在1:"<<b.any()<<endl;//证明是存在1的 
	   
	   cout <<"是否不存在1:" <<b.none()<<endl;//证明是存在1的 
	   
	   cout<<"1的个数为:"<<b.count()<<endl; //3
	   
	   cout<<"b中元素的个数:"<<b.size()<<endl;  // 5
	   cout<<"下标为i的元素是不是1:"<<b.test(1)<<endl; //下标为1的元素是1
	   
	   b.flip(1);//将元素b[1]位置上的元素进行取反
	   
	   cout<<b<<endl; //10001
	   
	   unsigned long a = b.to_ulong(); //转换成数字 
	   cout<<a<<endl; // 17
	  return 0; 
}

sort(排序)

1.在使用时,要使用相应的头文件

cpp 复制代码
#include<algorithm>

2.使用

cpp 复制代码
#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 1
       cout<<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 10
      
	  return 0; 
}

3.cmp自定义函数

cpp 复制代码
#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 10
       cout<<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; 
}

注意:在自定义函数中,只允许使用> , < ,不允许使用 <= ,>=

cpp 复制代码
#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;
	else
	return 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头文件

cpp 复制代码
#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  \r
     
     char s1 = tolower(s);
     cout<<s1<<endl; //a
     char s2 = toupper(s);
     cout<<s2<<endl; //A
     
     
	  return 0; 
}

cpp11特性

cpp 复制代码
#include<iostream>
#include<algorithm>
using namespace std;

int main()
{
     auto a = 10;
     cout<<a<<endl; 
     auto x ="hello";
     cout<<x<<endl;
	  return 0; 
}

注意:在使用auto时,必须对变量进行初始化

cpp 复制代码
#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 2
    cout<<endl;
    for(auto &b:v) //取地址可以对值进行更改
      b++;
    for(auto c:v)
      cout<<c<<" "; // 3 3 3 3 3
    
	  return 0; 
}
cpp 复制代码
#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; 
	  
}
cpp 复制代码
#include<iostream>
#include<algorithm>
#include<string>
using namespace std;

int main()
{
    int s = stoi("123");
	cout<<s-1<<endl; //122
	double s1 = stod("12.34"); 
	cout<<s1-1; //11.34
	  
}

小知识点

优先队列的底层实际是堆排序 priority-queue <int,vector,greater>

第一个参数是数据类型,第二个参数是封装的数据,第三个是实现方式(从大到小排列)(less是从小到大排序)

q.size(),size()的方法返回的是unsigned int,如果两个方法相减结果还是无符号的,不会存在负数 !

超级玛丽游戏

c++ 复制代码
#include<iostream>
// 引入输入输出流库,用于在控制台进行输入输出操作
using namespace std;
int main()
{
    // 主函数,程序的入口点
    cout<<R"(                ********
               ************
               ####....#.
             #..###.....##....
             ###.......######              ###            ###
                ...........               #...#          #...#
               ##*#######                 #.#.#          #.#.#
            ####*******######             #.#.#          #.#.#
           ...#***.****.*###....          #...#          #...#
           ....**********##.....           ###            ###
           ....****    *****....
             ####        ####
           ######        ######
##############################################################
#...#......#.##...#......#.##...#......#.##------------------#
###########################################------------------#
#..#....#....##..#....#....##..#....#....#####################
##########################################    #----------#
#.....#......##.....#......##.....#......#    #----------#
##########################################    #----------#
#.#..#....#..##.#..#....#..##.#..#....#..#    #----------#
##########################################    ############ )";
    // 使用原始字符串 字面量  R"(...) 输出艺术图案
    // 原始字符串字面量以 R"(" 开头,以 ")" 结尾,其中的内容会原样输出,无需对特殊字符进行转义
}
c++ 复制代码
#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

c++ 复制代码
int* a,b; //前者是指针,后者是整数
//其实质是 int *a,b; * 是跟着变量的,如果想要定义两个指针,则应该是
int *a,*b;
//关于c++的引用应当也是这样的
int &a = 10,&b = 20;
相关推荐
星空露珠2 小时前
数独解题算法lua脚本
开发语言·数据结构·算法·游戏·lua
滴滴滴嘟嘟嘟.2 小时前
全屏定时提醒工具
java·开发语言
煤球王子3 小时前
学而时习之:C++语言基础了解
c++
yy_xzz3 小时前
【数据结构】队列(Queue)详解——数据结构的“先进先出”
开发语言·数据结构
南棱笑笑生3 小时前
20251028在荣品RD-RK3588-MID开发板的Android13系统下解决关机的时候最近打开的应用不关的问题
开发语言·python·rockchip
承渊政道3 小时前
算法复杂度
c语言·数据结构·c++·算法·visual studio
千年奇葩3 小时前
Unity性能优化之:利用CUDA加速Unity实现大规模并行计算。从环境搭建到实战案例
c++·人工智能·unity·游戏引擎·cuda
AA陈超3 小时前
虚幻引擎5 GAS开发俯视角RPG游戏 P06-25 属性信息数据资产
c++·游戏·ue5·游戏引擎·虚幻
AnalogElectronic4 小时前
vue3 实现贪吃蛇手机版01
开发语言·javascript·ecmascript