该程序假设返回列表中所有元素的乘法和。 如果list包含(1,2,3),则应返回6。 我看到了一些相关的帖子,但我仍然无法理解。
我试过了:
xList cotains(3,2)
for (std::list<unsigned>::iterator it=xList.begin(); it!=xList.end(); ++it)
{
subtotal= ((*it) * ((*it+1));
total= total + subtotal;
}
我得到的输出是18,我应该得到6.任何线索?
答案 0 :(得分:2)
假设@Frank Osterfeld的评论在建议你想要列表中元素的产品时是正确的,这将是这样做的:
#include <iostream>
#include <list>
int main () {
std::list<unsigned> xList;
xList.push_back(3);
xList.push_back(2);
unsigned product = 1;
for (std::list<unsigned>::iterator it=xList.begin(); it!=xList.end(); ++it) {
product = product * (*it);
}
std::cout << product << std::endl;
return 0;
}
由于it
是迭代器而不是指针,因此无法通过向迭代器添加一个来获取迭代器的下一个值。正如其他人所示,原始代码在list元素的值中加了一个,这也不是你想要的。
答案 1 :(得分:1)
for (std::list<unsigned>::iterator it=xList.begin(); it!=xList.end(); ++it)
{
subtotal= ((*it) * (*(it+1));
total= total + subtotal;
}
你喜欢这样吗?虽然我不太明白你的意思是“乘法之和”
这可能会对列表中的最后一个元素产生另一个问题,*(it+1)
将超出范围
如果你想要列表中所有元素的乘法,
unsigned total = 1;
for (std::list<unsigned>::iterator it=xList.begin(); it!=xList.end(); ++it)
{
total *= *it;
}
答案 2 :(得分:0)
你的问题就在这一行:
subtotal= ((*it) * ((*it+1));
您正在取消引用指针,然后添加一个指针,但您要做的是在指针中添加一个:
subtotal= ((*it) * (*(it+1));
答案 3 :(得分:0)
这里建议的答案假设存储的输出位于整数范围内!!!,如果输出将超过2 ^ 64,那该怎么办!!!一种可能的解决方案是添加(列出添加而不是使用&#39; +&#39;运算符)可用的总和n次,其中n来自列表。