草庐IT

空指针

全部标签

算法(3)前缀和+差分+双指针+位运算

前缀和:一维:原数组:a1,a2,a3,……,an;前缀和:si=a1+a2+a3+……+ai;求法:s[i]=s[i-1]+a[i];作用:快速求出一段的和练习题:795.前缀和-AcWing题库代码:#includeusingnamespacestd;constintN=100010;intq[N];//存数intn,m;//n个数m个询问ints[N];//存前缀和intres[N];//存答案intmain(){ cin>>n>>m; s[0]=0; for(inti=1;i>q[i]; s[i]=s[i-1]+q[i];//存前缀和 } for(inti=0;i>l>>r; re

c++ - 多态性和成员函数指针是如何工作的?

这个问题在这里已经有了答案:Pointerstovirtualmemberfunctions.Howdoesitwork?(3个答案)关闭9年前。我有以下代码:#includeusingnamespacestd;classBase{public:virtualvoidWhoAmI()const;typedefvoid(Base::*WhoPtr)()const;};classDerived:publicBase{public:virtualvoidWhoAmI()const;};voidDerived::WhoAmI()const{cout让我们关注主要内容:intmain(){Bas

C++双指针成员访问

C++(Arduino包装器)问题:我正在一个连接了LCD的Arduino上写一个射击游戏-我有一个基类(Sprite),从这个基类派生出其他类-Alien,Missile和Player.Alien类的构造函数也有私有(private)成员pMissile(指向Missile类的指针)-我认为“对象中的对象”是描述这一点的一种方式。[当Alien发射导弹,它将自己的(x,y)坐标传递给导弹,导弹有自己的从Alien开始移动的方法。的坐标]我的问题是:如何通过Alien访问导弹的坐标?目的?简化的代码如下,我还绘制了类的表示://Bassclass-hasaform/shape,xand

c++ - 单一所有者和多个引用的智能指针

回到过去,我使用原始指针实现链表和树。当我尝试使用智能指针实现时,我遇到了以下问题,因为我不知道如何使用只有一个所有者但有0个或多个引用的指针:举一个二叉树的例子:对于初学者来说,节点应该是指针的唯一“所有者”:节点与树一起生死,所以对我来说,让它们成为unique_ptr是有意义的而不是shared_ptr:classTree{std::unique_ptrroot_;}classNode{std::unique_ptrleft_child_,right_child_;}然后我不得不做一个这样的算法:Node*node=root_.get();//left_countright_co

c++ - 使用未知指针类型调用函数重载

所以,我有一个基类PhysicsObject,子类Colliding,以及再次从中派生的两个类,Static和Newtonian.检查碰撞时,我将所有碰撞写入std::vector>collisionVector.(碰撞检测是相当基础的,它并不是问题的真正一部分。)现在,在检测到所有碰撞后,我遍历collisionVector并调用静态collide方法,它具有以下四个重载:voidcollide(Newtonian*first,Newtonian*second);voidcollide(Newtonian*object,Static*obstacle);inlinevoidcolli

c++ - 以下哪一项是 "auto"推导指针类型的更正确方法?

关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭8年前。Improvethisquestion(非常基本的问题:)我发现以下两种方式都生成int*类型。我可以知道哪个更合适吗?inti=42;autoa=&i;auto*b=&i;(我试图将指针示例与引用示例相关联:autoc=i;和auto&d=i;。但似乎类比在这里不起作用.)编辑:我还发现另一个(密切相关的)例子很奇怪:autoi=42,p=&i;//failsatcompilationautoi=42,*p=&i;//pas

C++ - 通过单个指针访问多个对象的接口(interface)

我需要存储一个对象指针容器。这些对象有一些我想要强制执行(可能在编译时)和使用的通用方法/属性(接口(interface))。示例:structA{voidfly(){}};structB{voidfly(){}};Aa;Bb;std::vectorobjects;objects.push_back(&a);objects.push_back(&b);for(auto&el:objects)el->fly();更简单的解决方案是A和B继承一个共同的基类,如FlyingClass:structFlyingClass{voidfly(){}};structA:publicFlyingCla

算法打卡day03|链表专题01:虚拟头节点使用、单链表查找删除元素、链表设计通过索引(add、delete、get)、使用双指针思路实现链表反转|Leetcode203、707、206

1.基础知识——链表是由指针串联在一起的线性结构分类:(1)单链表:每个节点由数据域与指针域组成{data,next}(2)双链表:每个节点由数据域及指针域(两个指针)组成{data,pre,next}(3)循环链表:节点结构与单链表一致,但是首尾相连存储:内存分布不是连续的链表定义代码※链表优点在于长度不固定,能够实现动态增删,适用于增删频繁但是查询频率比较低的情景Leetcode203.移除链表元素题目链接:https://leetcode.cn/problems/remove-linked-list-elements/description/分析:经典链表操作,主要需要考虑两种场景当前节

C语言——深入理解指针(3)

今天搞const修饰指针,呼,终于睡醒早了一会。搞起来搞起来        今天搞const修饰指针,我们已经知道,把一个变量的地址交给一个指针的时候,可以通过指针来修改变量的值,那如果我们用const来修饰变量或者指针的话,会发生什么呢?1.const修饰变量 首先我们看没有const修饰的情况#includeintmain(){ inta=10; a=100; printf("%d",a); return0;}首先我们初始化a,然后将a赋值为100,然后打印a,看a的值, 显然a的值发生了改变,这小孩都会 下面我们用constint来看一下 intmain(){ constinta=10;

c++ - 指向数组声明的指针

考虑以下情况:1.externint*a;int*a=newint(1);//OK2.externinta[];inta[5];//Ok3.externint(*a)[];int(*a)[5];//error:redefinitionof'a'withadifferenttype:'int(*)[5]'vs'int(*)[]'您能解释一下为什么第3种情况会抛出编译时错误吗?与前两者究竟有何不同?我正在寻找对标准的相应引用。 最佳答案 简而言之:第三种情况不同,因为指针变量的type不匹配-extern声明了一个指向具有未知大小(不完