c++ - 累积没有给出我的 vector 的正确总和

标签 c++ vector accumulate

我有这个问题:

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/

相关文章:

c++ - 如何读取分隔文件的最后一行

c++ - 如何从 vector char 初始化字符串流

C++ vector 累加

c++ - 如何在没有互斥体的情况下锁定文件流

c++ - 使用 Gecode 打印到文件

c++ - 尝试加入时线程崩溃

c++ - 关于STL指针的新手问题

c++ - OpenCV findContours 不工作

matlab - 如何积累数据集?

c++ - 为什么 std::accumulate 生成 705032704 作为输出而不是 vector 中元素的总和?