块链的split操作,第一种没有用memcpy很明显是对的
void Split(int x,int pos){
if(x==-1||pos==t[x].sz)
return ;
Pushdown(x);
int y=New();
if(t[x].Tov)
{
t[y].Tov=t[x].Tov;
t[y].nxt=t[x].nxt;
t[x].nxt=y;
t[y].sz=t[x].sz-pos;
t[y].Rev=0;
}
else
{
t[y].nxt=t[x].nxt;
t[x].nxt=y;
t[x].sz=pos;
for(int i=pos;i<=t[x].sz;i++)
t[y].val[++t[y].sz]=t[x].val[i];
}
Update(x),Update(y);
}
第二种用了memcpy就莫名其妙炸掉了,也不知道哪里错了,求助大佬解释
void Split(int x,int pos){
if(x==-1||pos==t[x].sz)
return ;
Pushdown(x);
int y=New();
if(t[x].Tov)
{
t[y].Tov=t[x].Tov;
t[y].nxt=t[x].nxt;
t[x].nxt=y;
t[y].sz=t[x].sz-pos;
t[y].Rev=0;
}
else
{
t[y].nxt=t[x].nxt;
t[x].nxt=y;
t[x].sz=pos;
t[y].sz=t[x].sz-pos;
memcpy(t[y].val,t[x].val+pos,t[y].sz*sizeof());
}
Update(x),Update(y);
}
(((包括Insert在内的所有操作的memcpy都锅掉了。。。是不是开结构体数组的原因需要重载某些运算符啊。。。