代码思路详解——初识C++(勿喷)
发布日期:2021-09-29 21:09:53 浏览次数:2 分类:技术文章

本文共 2286 字,大约阅读时间需要 7 分钟。

都是之前的博客了,发现草稿箱里面还有很多……

容器的使用

  • 栈:①考虑栈为空     ②考虑出栈的个数

有关lower_bound函数的使用

结构体

写一个代码思路很重要,就拿来说,首先,我们可以将起始点加入我们的队列中,距离和供油量为0.需要得到多组数据并为其赋值还要不互相影响,要使用什么知识来解决这个问题呢?我们最先可能会想到数组,但数组是有局限性的,无法将汽油以及和站点很好的联系起来,这个时候,我们可以用来存储数据;

是单个输出单词,并不计入空格,使输入与输出数据互不影响

结构体存位置:

 

1

Step(int xx, int s):x(xx), steps(s){ }

是这个Step结构体的构造函数,C++中的结构体和C中不太一样,已经可以像和C++中的类一样写入函数了,
函数括号后面的是初始化列表,上面的写法等价于:

1

2

3

4

Step(int xx, int s){

    x = xx;

    steps = s;

}

数组

其次,这点很重要,用数组下标解决问题使问题简单了很多,我们可以用数组下标解决很多问题:

①可以将数组下标作为加油站的站点

②可以用数组下标来计算每个数字出现的次数

 

单目运算符

目前就是运用单目运算符,灵活用到了&与^符号的应用,&相同则为0,否则为1,而^运算,有0则为0;

a -= (a & 1) ^ 1;

1&1=0         3&1=2     2&1=3      即偶数加一,奇数减一

1^1=1          3^1=3      2^1=0       即偶数均为0,奇数不变

数据的不重复输出

将数字不重复输出

 for(i=1;i

②set使用练习:输出字符中不重复的字符

#include
int main(){char c;set
set_c;//创建setwhile(cin.get(c))set_c.insert(c);//插入,set不支持下标,insert返回pair,first指向元素,second是一个boll值,true表示插入成功,false表示已有元素set
::iterator iterator=set_c.begin();//创建迭代器指向首while(iterator!=set_c.end()){cout<<* iterator;//输出迭代器指向,只读,不可修改值iterator++;}}

char型与int型的转换:

把一个数字字符ch,转为一个整数,就是ch-'0'当然ch-48也行

边计算边取余: 运算速度更快

#include
using namespace std;int main() { long long a,b,ans; while(~scanf("%lld%lld",&a,&b)) { ans=1; for(long long i=a+1; i<=b; i++) { if(i%10==0) { ans=0; break; } else ans*=i%10; } printf("%lld\n",ans%10); } return 0;}

大数据不要用cin and cout,两杯速度的 差距

逆向思维:看了题解还不太明白的一道题

#include
#include
#define lson l,mid,rt<<1#define rson mid,r,rt<<1|1 //建树****** #define maxn 200005using namespace std;//将原数据建树,单点修改,相同位置++,想了半天,好像是错的//看了别人的思路,咋也想不到用线段树怎么去解决这个问题 //倒叙插入,最后一个插入的数是不会改变的,用节点保存空位数 //2 69 __ __ 69 __ (需要前面有3个空位才能插入)//1 33 __ 33 69 __ (需要前面有2个空位才能插入)//1 51 __ 33 69 51 (需要前面有2个空位才能插入) 前面只有1个空位 故插入后面空格//0 77 77 33 69 51 (需要前面有1个空位才能插入)int n,p[maxn],v[maxn];int tree[maxn<<2],ans[maxn];void build(int l,int r,int rt) { tree[rt]=r-l; if(tree[rt]==1) { //res[rt]=a[l]; return ; } int mid=(l+r)>>1; build(lson); build(rson);} void update(int pos,int val,int l,int r,int rt) { --tree[rt]; if(r-l==1) { ans[l]=val; return ; } int mid=(l+r)>>1; if(pos
<<1]) update(pos,val,lson);//****** else update(pos-tree[rt<<1],val,rson); }int main() { int n,i; while(~scanf("%d",&n)) { for(i=0;i
=0;i--) { update(p[i],v[i],0,n,1); } for(i=0;i

 

转载地址:https://blog.csdn.net/hou_shiyu/article/details/81223246 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:常见错误类型
下一篇:Set的用法以及相关例题——插入不重复元素

发表评论

最新留言

表示我来过!
[***.240.166.169]2024年04月19日 07时06分06秒