C++编程基础

C++编程基础

万能头文件#include<bits/stdc++.h> 中包括了C++中很多库,基本上可以满足编程中用的库调用。

一、语言入门、简单模拟

万能模板:

#include<bits/stdc++.h>
using namespace std;
int main(){
    printf("hello world!\n");
    return 0;
}

多组读入:

while(scanf("%d%d",&n,&s)!=EOF){
    int sum=n+s;
}

cin与cout为流输入输出。需要同步,当数据量很大时,比较耗时。cin与cout一般用来输入输出string类型。
scanf与cin不能读入空格,遇到空格会断开。
gets(s)或getline(cin>>s)可以整行读入字符串,可以读入空格。
刷题中一般推荐使用scanf与printf。以下是几种常见的类型的输入输出。

scanf("%d",&int) printf("%d",int)
scanf("%lld",&long long) printf("%d",long long)
scanf("%c",&char) printf("%c",char)
scanf("%f",&double) printf("%f",double)

题目描述一般为 输入–>>main()–>输出
对输入数据,我们要想到用合适的数据结构来处理
如处理n个数据输入,可以使用一维数组;如处理正方形区域坐标输入/或者涉及到方向,可以使用二维数组。
如处理坐标(x,y),学生成绩{姓名、学号、分数等}可以使用结构体数组。
其他数据结构,图,树等

总结:模拟题一般都是要求模拟一个过程,给一个输入,按照题目要求模拟之后给出输出,主要是面向过程的,只需要注意细节即可。
题目:oj网站是http://pipioj.online/

题目id:13151314106710691015104213131209

二、STL

C++支持的STL中包含了很多数据结构以及算法,可以让我们很方便的使用,只需要用前面提到的万能头文件即可。

集合:set
特点:无重复元素,按重载的<运算符进行排序,是有序的。
set<type> se;
se.clear()//清空
se.size()//取大小
se.insert(v)//插入v
se.earse(v)//删除v
se.find(v)//返回指向v的迭代器

set<type>::iterator it;//迭代器,类似指针
for(it=se.begin();it!=end();++it) *it//遍历集合

栈:stack
特点:后进先出,操作受限的线性表

stack<type> s;
s.push(v)//元素v入栈
s.pop()//出栈栈顶元素
s.top()//访问栈顶元素
s.empty()//判断栈空,返回true
s.size()//栈的长度,判空也可以用s.size()==0

队列:queue
特点:先进先出,操作受限的线性表

queue<type> q;
q.push()//入队
q.pop()//出队
q.front()//取队首元素,优先队列的话是用top()取队首元素
q.empty()//判队空
q.size()//队列大小
优先队列priority_queue,默认是大根堆,这里说一下,
优先队列是基于堆实现的,大家注意一下优先级的定义,大家要记住,排序的话,优先级是从低到高,如1<2<3
所以大根堆的优先队列,队首元素是最大的,定义一个int类型的大根堆优先队列 pritority_queue<int> q;
那小根堆呢,定义一个int类型的小根堆优先队列priority_queue<int,vector<int>,greater<int>> q;
当然队首元素是最小的,(优先级最高的)

容器:vector
特点:不定长数组,支持很多类型,如string等

vector<type> v;
v.clear();//清空v
v.push_back(a)//尾插入
v.pop_back(a)//尾删除
v.size()

字符串:string
特点:可以长度改变的字符串

string s;
s.length();
s.size();//计算s长度时建议用size(),效率会快很多
strcmp(s1,s2)//s1<s2返回复数,s1=s2返回0,s1>s2返回正数
s.substr(pos,len)//从下标位置pos处取长度为len的子串,超过取到尾为止。
特别注意的是string 类型还可以用迭代器访问

二元组:pair

pair<type1,type2> q;
q.first访问第一个int,q.second访问第二元素

重载运算符:实现一个结构体student,结构体中包含两个变量,学号,分数,要求按照score进行降序排序,按照学号进行升序排序。

struct student{
              int id;
              int score;
              bool operator < c(const student&s)const{
              if(score==s.score) return id<s.id;
              else return score>s.score;
              }//运算符重载后,后面对该结构体调用排序算法时,都会按照定义的<符号的规则进行排序。

映射:map
特点:就是hash,从key到value值的映射,也是按key值的<排序的,是有序的,而且无重复的key

map<type1,type2> mp;//依次是key,value的类型
mp.clear()//清空
mp.count(key)//返回key是否存在,存在返回true
mp.find(key)//返回key的位置,没有则返回mp.end()
mp[key]=value;//赋值初始化
mp<type1,type2>::iterator it;//迭代器
it->first//访问key
it->second//访问value 也可以用(*it).value

unordered_map<type1,type2> mp;//无序哈希,速度比较快

STL自带函数:

sort(a,a+n)//数组类型
sort(a.begin(),a.end())//迭代器类型,如vector
min(a,b)
max(a,b)
swap(a,b)
isalpha(c)//判断c是否为英文字符,大写返回1,小写返回2,非字母返回0
tolower(c)//把字母转成小写,返回小写

总结:关于STL,大家可以先会用就行,想深入学习c++的话可以学习stl源码解析等

题目id:
1332
1325
1334
1065
1070
1037
1150
1114
1173
1330
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值