在向量中添加相邻字符

时间:2014-12-22 00:07:44

标签: c++ algorithm visual-studio-2012 for-loop

所以我试图创建一个代码来在向量中添加相邻的数字。 我实际上已经找到了挑战并设法生成了我想要的代码,但是在玩弄它时我发现了一些我不理解的令人费解的东西。

简要说明或我想要实现的目标: 用户应输入他们想要的许多整数。 这些数字应该以相同的顺序存储在数组中。

在这个例子中,我们使用整数[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] << " ";
    }
}

2 个答案:

答案 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()似乎没有必要,但这可能是因为您从更复杂的代码中抽象出这个问题。