这是一个简单的函数,它采用整数向量,并且只对奇数条目求和。
#include <iostream>
#include <vector>
#include <string>
using namespace std;
int f(vector<int> & n)
{
vector<int>::iterator itA;
int sum = 0;
for (itA = n.begin(); itA != n.end(); itA++)
{
if (*itA % 2 == 1) sum += *itA;
}
return sum;
}
int main()
{
vector<int> a;
a[0] = 3;
a[1] = 5;
a[2] = 6;
a[3] = 1;
cout << f(a) << endl;
system("pause");
}
运行时,由于矢量下标超出范围而崩溃。为什么会这样?迭代器从vector.begin()开始,遍历向量,而迭代器不指向vector.end(),它应该是整个向量。
答案 0 :(得分:2)
vector<int> a;
创建一个空向量,因为它是空的(即没有元素),访问带有a[index]
的元素总是超出边界访问,这会导致未定义的行为,并且在你的情况下,崩溃。使用push_back
或emplace_back
将元素附加到矢量。
答案 1 :(得分:1)
这将解决您的问题:
#include <iostream>
#include <vector>
#include <string>
using namespace std;
int f(vector<int> & n)
{
vector<int>::iterator itA;
int sum = 0;
for (itA = n.begin(); itA != n.end(); itA++)
{
if (*itA % 2 == 1) sum += *itA;
}
return sum;
}
int main()
{
vector<int> a(4);
a[0] = 3;
a[1] = 5;
a[2] = 6;
a[3] = 1;
cout << f(a) << endl;
system("pause");
}