我有这个问题:
int nCab = 11;
int nCabCombo;
std::vector<int>counter(nCab);
for(int i = nCab; i > 0; i--)
{
counter[i] = i-1;
std::cout<<counter[i]<<std::endl;
}
nCabCombo = std::accumulate(counter.begin(),counter.end(),0);
std::cout<<nCabCombo<<std::endl;
nCabCombo 的输出是 45,而它应该是 55,出于某种原因,accumulate 函数没有添加我的计数器 vector 索引 11 处的 10。有人可以告诉我我在这里做错了什么吗?谢谢!
最佳答案
您没有索引 11。您的 vector 中有 11 个元素,这意味着有效索引为 [0, 10]
。 counter[i] = i-1;
是未定义的行为,因为您正在访问 vector 末尾之后的一个。
忽略 UB 你的 vector 实际上包含 {0,0,1,2,3,4,5,6,7,8,9}
这是 45
注意:它不包含 -1
的原因是 i > 0
的 for 循环运行,所以 i
永远不会 0
并且我们永远不会设置 vector 的第一个元素,因此在构建 vector 时它仍然是 0
。
关于c++ - 累积没有给出我的 vector 的正确总和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35802660/