为什么简单的C++向量函数会产生越界的下标
Why does simple C++ vector function produce subscript out of bounds?
这是一个简单的函数,它接受整数向量,并且只对奇数条目求和。
#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((,这应该是整个向量。
vector<int> a;
创建一个空向量,并且由于它是空的(即没有元素(,因此使用 a[index]
访问元素始终是越界访问,这会导致未定义的行为,并且在您的情况下会导致崩溃。使用 push_back
或 emplace_back
将元素追加到矢量。
这将解决您的问题:
#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");
}
相关文章:
- 尝试通过多个向量访问变量时,向量下标超出范围
- 矢量下标超出SFML游戏中的范围
- 如何在C++程序中使用下标数字?
- 一组值的零开销下标运算符
- 运行时错误:矢量下标超出范围:正在检查空集
- 如何重载下标运算符 [] 以引用 2d STL 数组?
- 如果变量数据包含大于 vector 所有元素的整数,则仅在视觉工作室上接收"矢量下标超出范围"?
- 矢量无效下标.SFML
- C++ IDE 不会推断/自动完成对模板类中的 std::array 下标表达式的成员访问
- 编译期间矢量下标超出范围
- C++ 调试断言失败 - 矢量下标超出视觉工作室的范围
- 有什么理由不扩展 std::set 以添加下标运算符吗?
- 在继承的模板类中使用下标 [] 运算符
- 对矢量来说是全新的.矢量下标超出范围
- 运算符重载多个任务的下标和赋值运算符
- 为什么函数的任何索引处的下标运算符在C++中总是返回1
- c++下标运算符到下级类向量
- C++十进制到十六进制(字符串下标超出范围)
- 创建结构体向量,表达式:向量下标超出范围
- 为什么简单的C++向量函数会产生越界的下标