手动执行C++;矢量 我对编程和C++是新的,在我的课程中,我需要手工执行一个程序,并展示元素是如何变化的以及哪些元素是变化的。我有点被困在这个问题上,但我认为我走对了方向。任何帮助都将不胜感激 void data(vector<double> &data, int idx, double value) { data.push_back(value); if (idx >= data.size() - 1) return; if (idx < 0) idx = 0; for(int i = data.size() - 1; i > idx; i--) { data[i] = data[i -1]; data[i - 1] = value; } }

手动执行C++;矢量 我对编程和C++是新的,在我的课程中,我需要手工执行一个程序,并展示元素是如何变化的以及哪些元素是变化的。我有点被困在这个问题上,但我认为我走对了方向。任何帮助都将不胜感激 void data(vector<double> &data, int idx, double value) { data.push_back(value); if (idx >= data.size() - 1) return; if (idx < 0) idx = 0; for(int i = data.size() - 1; i > idx; i--) { data[i] = data[i -1]; data[i - 1] = value; } },c++,vector,C++,Vector,所以-7值就是推回到向量末端的值 我想我已经找到了其中的一些,data.size()-1表示数组中的最后一个元素,如果idx大于或等于最后一个元素,则返回该值?对于我来说,for循环似乎是反向迭代的。如果您的问题是要找出此算法的目的,请阅读此答案 让我们首先以您的例子: std::vector<double> a{ 4, -6, 0, 8, -7 }; data(a, 2, -7); std::向量a{4,-6,0,8,-7}; 数据(a,2,-7); 结果是:4、-6、-7、0

所以
-7
值就是
推回到向量末端的值


我想我已经找到了其中的一些,
data.size()-1
表示数组中的最后一个元素,如果
idx
大于或等于最后一个元素,则返回该值?对于我来说,for循环似乎是反向迭代的。

如果您的问题是要找出此算法的目的,请阅读此答案

让我们首先以您的例子:

std::vector<double> a{ 4, -6, 0, 8, -7 };
data(a, 2, -7);
std::向量a{4,-6,0,8,-7};
数据(a,2,-7);
结果是:
4、-6、-7、0、8、-7

应该清楚的是,
data(vec,idx,val)
val
插入
vec
中,使其成为
idx
第四个元素,
vec
将其大小增加了1。 如果
idx
超出范围,则将其调整为0(如果
<0
)或
vec.size()
(如果
=vec.size()

编辑: 可视化:

最初:
4、-6、0、8、-7、-7

第一次迭代
I=data.size()-1=5

4、-6、0、8、-7、-7
data[5]=data[4]

4、-6、0、8、-7、-7
数据[4]=值

(注意:此处
-7=-7
因此没有任何变化)

第二次迭代
I=4

4、-6、0、8、8、-7
data[4]=data[3]

4、-6、0、-7、8、-7
数据[3]=值

第三次迭代
I=3

4、-6、0、0、8、-7
data[3]=data[2]

4、-6、-7、0、8、-7
数据[2]=值

现在
I=2
,完毕

if (idx >= data.size() - 1) return;
实际上,检查索引是否不在数组之外
data.size()-1
是最后一个元素,因此idx最多可以是第二个最后一个元素。我们将看到这是为什么

if (idx < 0) idx = 0;
从最后一个元素的索引开始,只要它大于idx,就可以继续进行另一次迭代(并减小它)。所以在你的例子中,你会有两次迭代,i=4和i=3。idx就像一个排他的下限

data[i] = data[i -1];
data[i - 1] = value;
首先将上一个元素复制到当前元素,然后将值(-7)复制到上一个元素。因此,在最后一次迭代中,i-1将与idx相同。因为idx不能是最后一个元素,因为这样循环就不会进入


这实际上是一步一步地从向量的末端插入值到位置idx。最后一个元素丢失,其他元素向上滑动一个位置。每一次迭代,它都会在左边多出一个位置,之前的位置也会增加。

如果我的英语不好,很抱歉,但我不明白你的问题是什么。请你解释一下好吗?当然可以,基本上是用我给出的向量值。我需要直观地显示元素是如何变化的,但不是通过程序。在纸上,我正在手动尝试计算迭代。如果我能理解程序的工作原理,我就可以把它写在纸上。这就是我遇到的问题。谢谢。还要注意,这是低效的。
data[i]=data[i-1]
取消
数据[i-1]=值
在上一次迭代中。Read恢复了我的否决票。因为答案需要一些解释,正如OP所期待的。现在看起来不错+谢谢你的帮助,我会给手工执行更多的练习来更好地理解算法。不幸的是,这是我的导师给我们的一个解决方案。这是有点混乱,因为导师正在使用自己的SDK与C++和语法是非常不同的C++我以前见过。
for(int i = data.size() - 1; i > idx; i--)
data[i] = data[i -1];
data[i - 1] = value;