所以我试图创建一个代码来在向量中添加相邻的数字。 我实际上已经找到了挑战并设法生成了我想要的代码,但是在玩弄它时我发现了一些我不理解的令人费解的东西。
简要说明或我想要实现的目标: 用户应输入他们想要的许多整数。 这些数字应该以相同的顺序存储在数组中。
在这个例子中,我们使用整数[1],[2],[3],[4] - 因为它们很容易添加。
下面的代码使用两个for循环,第一个索引(i1)从holder [0]开始,另一个 循环索引(i2)从holder [1]开始。这样两个索引总是彼此相邻。
在我输出持有人[0] +持有人[1](等于3)的总和之后 两个索引都应该增加2,这将把它们的位置移动到持有者[2]和持有者[3],在它们增加之后,它们的总值应该是7.因为持有者[2]和持有者[3]拥有值分别为3和4。
考虑到这一点,我的输出应该是:3 7 但是当下面的代码执行我的输出时:3 5 5 7
我不了解幕后发生的事情?任何人都可以解释我做错了什么
当我输入以下代码时:
vector<int> holder;
int number;
while (cin >> number)
{
holder.push_back(number);
}
for(decltype(holder.size()) i1 = 0; i1 <= holder.size() - 2; i1 = i1 + 2)
{
for(decltype(holder.size()) i2 = 1; i2 <= holder.size() - 1; i2 = i2 + 2)
{
cout << holder[i1] + holder[i2] << " ";
}
}
答案 0 :(得分:4)
你不需要两个循环。这只是混淆了逻辑。如果您只想打印成对总和,请明确说明:
for (size_t i = 0; i < holder.size() - 1; i += 2) {
cout << holder[i] + holder[i+1] << " ";
}
这将明确地打印holder[0] + holder[1]
,然后打印holder[2] + holder[3]
等
答案 1 :(得分:2)
您只需要一个循环即可完成此任务:
vector<int> holder;
int number;
while(cin >> number)
{
holder.push_back(number);
}
for(unsigned i=0; i<holder.size()-1; i+=2)
{
cout << holder[i] + holder[i+1] << " ";
}
此外,使用decltype()
似乎没有必要,但这可能是因为您从更复杂的代码中抽象出这个问题。