为什么这在C ++中不起作用但在python中起作用

-2 c++ python

这是我要将我的python代码转换为c ++的两个代码

下面的Python和C ++代码

if n%2 and k>n//2:
    print(n%2,n//2)
    arr[n//2]=0
rem=k%(3*n)

for i in range(k-rem,k):
    t=i%n
    arr[t]^=arr[-1-t]

#print(arr)
print(*arr)
Run Code Online (Sandbox Code Playgroud)

C ++代码

if((n%2!=0) && (k>n/2))
    a[n/2]=0;

rem=k%(3*n);

for(i=k-rem;i<k;i++)
{
    l=i%n;
    a[l]^=a[-1-l];
}
for(i=0;i<n;i++)
{
    cout<<a[i]<<" ";
}
Run Code Online (Sandbox Code Playgroud)

Jef*_*ica 5

在此Python代码中

arr[t]^=arr[-1-t]
Run Code Online (Sandbox Code Playgroud)

索引之一将为负,并解释为“从数组末尾开始”,C ++则没有。因此:

a[l]^=a[-1-l];
Run Code Online (Sandbox Code Playgroud)

将触发未定义的行为(UB)。这不是正确的C ++程序。

  • 我故意不提供现成的代码。否则,该站点将成为大型“做我的作业”站点。但是,如果您愿意学习,我们将为您提供指导。 (2认同)