• 个人简介

    6 6 6

    freopen("文件名.in","r",stdin);
    
    freopen("文件名.out","w",stdout);
    

    priority_queue<int,vector<int>,less<int>>q1;//大顶堆
    priority_queue<int,vector<int>,greater<int> >q2;//小顶堆
    priority_queue<int>q3;
    queue<int>q4;
    que.push(xx); //将数据入队,放入队列末尾
    que.pop(); //删除队首元素
    que.front(); //访问队首元素
    que.back(); //访问队尾元素
    que.size(); //获取队列长度
    que.empty(); //判断队列是否为空
    

    stack<int> stk;
    stk.top(); //获取栈顶元素 栈为空时使用会异常
    stk.pop(); //删除栈顶元素 栈为空时使用会异常
    stk.push(value); //将值加入栈中
    stk.size(); //获取栈的长度
    stk.empty(); //判断栈是否为空,如果为空返回ture,不为空返回false
    //入栈
    stack<int> stk;
    for(int i=0;i<10;i++){
    	int t;
    	cin >> t;
    	stk.push(t);
    }
    //出栈
    //方法一
    int len = stk.size()
    for(int i=0;i<len;i++){
    	cout << stk.top() << endl;
    	stk.pop();
    }
    //方法二
    while(!stk.empty()){
        cout << stk.top() << endl;
    	stk.pop();
    }
    

    双端队列

    #include <deque> // deque属于std命名域的,因此需要通过命名限定,例如using std::deque;
    #include <iostream>
    
    using namespace std;
    
    itn main(){
        deque<int> qu; // 定义一个int类型的双端队列que
        return 0;
    }
    
    
    常用操作函数
    获取容器大小:que.size();
    容器判空(返回值为0时表示非空,1表示空):que.empty();
    队首添加元素:que.push_front(元素);
    队尾添加元素:que.push_back(元素);
    删除队首元素:que.pop_front();
    删除队尾元素:que.pop_back();
    清空所有元素:que.clear();
    下标访问(并不会检查是否越界):que[1];
    访问第一个元素:que.front();
    访问最后一个元素:que.back();
    

    优先队列 优先队列优先级修改

    //普通优先队列
    priority_queue<int> q; //定义一个优先队列,默认为大顶堆
    priority_queue<int, vector<int>, less<int> > a; //大顶堆 大的在队首
    priority_queue<int, vector<int>, greater<int> > b; //小顶堆 小的在队首
    //优先队列参数:
    //一:队列中储存的数据类型
    //二:堆的数据结构,默认为vecotr<int>,尽量不去做修改
    //三:队列中数据的优先级
    
    //结构体优先队列
    struct Node{
        int x, y;
    };
    //重载运算符
    bool operator<(Node a, Node b){//返回true时,说明a的优先级低于b
        //x值较大的Node优先级低(x小的Node排在队前)
        //x相等时,y大的优先级低(y小的Node排在队前)
        if( a.x== b.x ) return a.y> b.y;
        return a.x> b.x;
    }
    priority_queue<Node> que; //定义一个储存Node结构体变量的队列,并且在优先级规则上按照上面重载的运算符规则进行,如果未重载运算符,会直接报错
    
    

    map 概念:map是STL的一个关联容器,它以<key,value>键值对的形式存储,且map的内部自建一个红黑树,使得其可以自动排序。在Python中被称呼为“字典” 特点: 第一个可以称为关键字(key),每个关键字只能在map中出现一次; 第二个可能称为该关键字的值(value); key既不能重复也不能被修改 用处:map在做数据映射的时候能够非常简便的完成代码构建,并且保持查询高效。

    #include <map>
    #include <iostream>
    
    using namespace std;
    
    int main(){
    	map<string,int> a; //第一个表示key数据类型,第二个表示value数据类型
        a["one"] = 1; 
        a["tow"] = 2;
        a["one"] = 3;
        //赋值时,key值作为下标,后面的数据作为对应key的value元素,在map中新添加一对数据
        //赋值时,如果key值已经存在,表示将此key值对应的value元素修改为新的数据
        cout << a["one"] << endl;
        //key值可以作为下标,直接输出对应的元素
        cout << a["three"] << endl;
        //注意:下标访问不会做下标检查,如上语句不会报错,但打印结果为空,因为下标访问会插入不存在的key,对应的value为默认值
        a.insert({"three",3}); //将指定键值对插入到map中,插入元素会自动插入到合适的位置,使整个map有序,默认是按照key从小到大排序
        a.erase("one"); //删除指定key值的键值对
        cout << a.count("three") << endl; //查询指定key值是否出现
        cout << a.empty() << endl; //判断是否为空,非空为0,空为1 
        cout << a.size() << endl; //获取map长度
        
        map<string,int>::iterator it = a.begin(); //创建一个map类型迭代器  
        for(;it!=a.end();it++){
        	cout << it->first << " " << it->second << endl;
    	} //遍历并输出,因为是类结构体指针,每个键值对通过first访问key,second访问value
        return 0;
    }
    
    

    MessageBox

    MessageBox(NULL, ("信息"), ("标题"), MB_YESNO | MB_ICONINFORMATION)
    if (MessageBox(NULL, ("信息"), ("标题"), MB_YESNO | MB_ICONINFORMATION) == IDYES){ //判断点击的按钮是不是 "是"
    	printf("是");
    }
    else {
    	printf("否");
    }
    
    IDOK        //确定按钮
    IDCANCEL    //取消按钮
    IDABOUT     //终止按钮
    IDRETRY     //重试按钮         
    IDIGNORE    //忽略按钮
    IDYES       //是
    IDNO        //否
    MB_ABORTRETRYIGNORE//消息框包含三个按钮: “中止”、“ 重试”和 “忽略”。
    MB_CANCELTRYCONTINUE//消息框包含三个按钮: 取消、 重试、 继续。 使用此消息框类型而不是MB_ABORTRETRYIGNORE。
    MB_HELP//向消息框添加 “帮助 ”按钮。 当用户单击“ 帮助 ”按钮或按 F1 时,系统会向所有者发送 WM_HELP 消息。
    MB_OK//消息框包含一个按钮: “确定”。 这是默认值。
    MB_OKCANCEL//消息框包含两个按钮: “确定” 和 “取消”。
    MB_RETRYCANCEL//消息框包含两个按钮: 重试 和 取消。
    MB_YESNO//消息框包含两个按钮: “是 ”和“ 否”。
    MB_YESNOCANCEL//消息框包含三个按钮: “是”、“ 否”和 “取消”。
    

    集合

    #include <set>
    #include <iostream>
    
    using namespace std;
    
    int main(){
    	set<int> a; //定义一个集合
        int arr[5]= {0,5,13,19};
        set<int> b(arr,arr+5); //定义并初始化集合元素从数组arr中获取
        set<int>::iterator it = b.begin(); //创建一个set类型迭代器
    	for(;it!=b.end();it++){
    		cout << *it << endl;
    	} //遍历并输出
        cout << b.empty() << endl; //判断是否为空,非空为0,空为1 
        cout << b.size() << endl; //获取集合长度
        cout << b.count(13) << endl; //统计集合中指定元素出现的次数 
        b.insert(8); //将指定元素插入到集合中,插入元素会自动插入到合适的位置,使整个集合有序
        b.erase(13);//删除指定的元素
        return 0;
    }
    
    

    map

    #include <map>
    #include <iostream>
    
    using namespace std;
    
    int main(){
    	map<string,int> a; //第一个表示key数据类型,第二个表示value数据类型
        a["one"] = 1; 
        a["tow"] = 2;
        a["one"] = 3;
        //赋值时,key值作为下标,后面的数据作为对应key的value元素,在map中新添加一对数据
        //赋值时,如果key值已经存在,表示将此key值对应的value元素修改为新的数据
        cout << a["one"] << endl;
        //key值可以作为下标,直接输出对应的元素
        cout << a["three"] << endl;
        //注意:下标访问不会做下标检查,如上语句不会报错,但打印结果为空,因为下标访问会插入不存在的key,对应的value为默认值
        a.insert({"three",3}); //将指定键值对插入到map中,插入元素会自动插入到合适的位置,使整个map有序,默认是按照key从小到大排序
        a.erase("one"); //删除指定key值的键值对
        cout << a.count("three") << endl; //查询指定key值是否出现
        cout << a.empty() << endl; //判断是否为空,非空为0,空为1 
        cout << a.size() << endl; //获取map长度
        
        map<string,int>::iterator it = a.begin(); //创建一个map类型迭代器  
        for(;it!=a.end();it++){
        	cout << it->first << " " << it->second << endl;
    	} //遍历并输出,因为是类结构体指针,每个键值对通过first访问key,second访问value
        return 0;
    }
    
    

    快读快写

    inline int read(){ //inline 提速用的 
    	int x = 0;
    	char ch = getchar(); //读取第一个符号 
    	bool flag = 0;
    	while(ch < 48 || ch > 57){ //过滤非数字(空格、符号、字母等) 
    		if(ch == '-') flag = 1;
    		ch = getchar(); //读一个符号,将其转换到x中 
    	} 
    	while(ch>=48 && ch<= 57){ //读取一个连续的数字 
    		x = (x<<3) + (x<<1) + ch - '0'; //通过位运算符来代替 x*10的计算,提速 
    		ch = getchar();		
    	}
    	return flag?(-x):x; //三目运算符 ?前为条件  :前为条件成立 后为条件不成立 
    } 
    inline void write(int x){  //快写,用putchar()
    	if(x<0){
    		putchar(45);
    		x=-x;
    	}
    	if(x>9) write(x/10);
    	putchar(x%10+48);
    }
    int main(){
        int k = read(); //输入
        write(k); //输出
    	return 0;
    }
    
    
  • 通过的题目

  • 最近活动

题目标签

初窥门径
36
略有小成
30
循环结构
16
循环嵌套
13
一维数组
13
驾轻就熟
13
字符串
9
二维数组
7
搜索
7
枚举
7
电子学会一级
6
顺序结构
5
分支结构
5
结构体
4
电子学会考级
4
电子学会三级
4
排序
3
模拟
3
其他
3
递归
2