int *my_vector
通过MPI_Rec从主进程收到三个值。现在我想从所有值中减去第一个值并存储.eg
my_vector = { 4,8,12}
从所有中减去第一个元素ie.4后,我需要将这些值{0 4 8}更新/存储在my_vector中。
使用以下代码
for (i=0;i<=2;i++)
{
my_vector[i]=my_vector[i]-my_vector[0];
}
上面的代码减去第一个元素但不减去其他元素并给出{0 8 12}而不是{0,4,8}。 提前致谢
答案 0 :(得分:2)
这是因为my_vector[0]
在第一次迭代后获得值0
。
在循环之前获取my_vector [0]的副本:
tmp = my_vector[0];
for (i=0;i<=2;i++)
{
my_vector[i]=my_vector[i]-tmp;
}
另一个解决方案是从索引1开始循环并在循环之后更改索引0 :
for (i=1;i<=2;i++)
{
my_vector[i]=my_vector[i]-my_vector[0];
}
my_vector[0] = 0;
答案 1 :(得分:2)
虽然可能首选使用临时变量的“正常”前向循环,但也可以选择向后循环:
for (i = 2; i >= 0; --i)
{
my_vector[i] -= my_vector[0];
}
答案 2 :(得分:1)
当然,因为这段代码
for (i=0;i<=2;i++)
{
my_vector[i]=my_vector[i]-my_vector[0];
}
在第一次迭代时将my_vector[0]
设置为零。
您必须将my_vector[0]
存储在局部变量中才能执行偏移。
int offset=my_vector[0];
for (i=0;i<=2;i++)
{
my_vector[i] -= offset;
}