提问者:小点点

在C++中使用向量时,我是如何在这里得到分割错误的?


#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++编程的新手。 向量对我来说是个很新的概念。


共3个答案

匿名用户

vect是一个空向量,因此向其中索引会调用未定义的行为。

您可以为vect分配足够的空间,如下所示:

vector<int> vect(3);

或者可以push_back元素:

vector<int> vect;
vect.push_back(1);
vect.push_back(1);
vect.push_back(1);

匿名用户

您尝试访问123位置的元素,但是它们还不存在。

要插入到新元素,请尝试方法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

相关问题


MySQL Query : SELECT * FROM v9_ask_question WHERE 1=1 AND question regexp '(c++|中|向量|在这里|分割)' ORDER BY qid DESC LIMIT 20
MySQL Error : Got error 'repetition-operator operand invalid' from regexp
MySQL Errno : 1139
Message : Got error 'repetition-operator operand invalid' from regexp
Need Help?