为什么这在 c++ 中不起作用,但在 python 中工作

Why this is not working in c++ but work in python

本文关键字:但在 python 工作 不起作用 c++ 为什么      更新时间:2023-10-16

这是我的两个代码,我想将我的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)

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]<<" ";
}

在这个 Python 代码中

arr[t]^=arr[-1-t]

其中一个索引将是负数,并被解释为"从数组的末尾",C++没有。因此:

a[l]^=a[-1-l];

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

C++不允许数组的任何负索引。

从你的python语句arr[t]^=arr[-1-t],似乎你正在尝试访问最后一个元素。

因此,在C++中,如果您想拥有相同的功能,则可以使用a[t]^=a[(sizeof(a)/sizeof(a[0])) -1 -t].

相关文章: