我试图通过迭代我的向量来获取hours
中所有变量的总和。现在我收到此向量订阅错误,我不知道如何解决它。这是我的代码:
int hulpInt = hours[0];
for (int i = hours[1]; i != hours[hours.size()-1]; i++)
{
hulpInt = hulpInt + i;
}
int HOUR = hulpInt + hours[hours.size()];
如果您需要更多代码,请发表评论。
答案 0 :(得分:4)
解决这个问题的两种方法。
#include <functional>
#include <numeric>
#include <vector>
方法1:使用vector.size()
int hulpInt =0;
for(int i=0;i<hours.size();i++){
hulpInt+= hours[i];
}
方法2:使用std :: accumulate
int hulpInt = std::accumulate(hours.begin(),hours.end(),0);
答案 1 :(得分:3)
你应该这样做:
int sum = 0;
for (int i = 0; i < hours.size(); ++i) {
sum += hours[i];
}
答案 2 :(得分:2)
当你收到错误时,最好也包含它。
具体来说,我猜你用hours[hours.size()]
索引越界,因为向量是基于零的索引。
STL容器有漂亮的迭代器,有助于保持边界:
int h[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12};
std::vector<int> hours(h, h+12);
int total(0);
for (std::vector<int>::const_iterator i(hours.begin()); i != hours.end(); ++i)
total += *i;
STL也有使用这些迭代器为你做常见事情的算法:
#include <numeric>
int h[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12};
std::vector<int> hours(h, h+12);
int total = std::accumulate(hours.begin(), hours.end(), 0);
当然你也可以自己动手循环:
int h[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12};
std::vector<int> hours(h, h+12);
int total(0);
for (int i(0); i < int(hours.size()); ++i)
total += hours[i];
所有上述结果都得出相同的结果,他们只是略微不同的方式。正如他们所说的那样,猫的皮肤总是不止一种。