#include <bits/stdc++.h>
using namespace std;
int main()
{
vector<int> vect;
vect[0]=1;
vect[1]=1;
vect[2]=1;
for (int x : vect)
cout << x << " ";
return 0;
}
我想知道我在这里的过错。 我是C++编程的新手。 向量对我来说是个很新的概念。
vect
是一个空向量,因此向其中索引会调用未定义的行为。
您可以为vect
分配足够的空间,如下所示:
vector<int> vect(3);
或者可以push_back
元素:
vector<int> vect;
vect.push_back(1);
vect.push_back(1);
vect.push_back(1);
您尝试访问1
,2
和3
位置的元素,但是它们还不存在。
要插入到新元素,请尝试方法push_back
:
vect.push_back(1);
vect.push_back(1);
vect.push_back(1);
另一种选择是创建一个带有三个零的向量:
std::vector<int> vect(3, 0);
vect[0]=1;
vect[1]=1;
vect[2]=1;
或者更简单,创建一个大小为3的向量,所有元素都赋值为1:
std::vector<int> vect(3, 1);
vect
没有分配的存储空间,因此没有一个放入值的舞台,因此行为未定义。 您可以使用capacity()获取容器的分配空间,因此在您的示例中,vect.capacity()
将返回0。
此外,运算符[]不会检查边界,因此它将尝试访问[2],即使它的大小为0。 要访问检查边界,请使用()处的。
考虑到这一点,要解决这个问题,您必须为容器分配空间(在您的示例中是std::vector
),也就是说,只为vect
保留一个内存区域,vector
提供了不同的修改其大小的方法,例如构造函数,push_back,insert,resize等。
注意:如果可能,请避免使用名称空间std和
的