1

I have trouble with two dimensional vector. Example:

vector < vector<int> > data;

int i = 0;
int int_value;
while (i < 10 )
{   
    cin >> int_value;
    data[i].push_back (int_value);
}

I want using push_back for back insert and then I want use data [i][j]. Where is the problem?

4

5 回答 5

4

您需要data在使用之前初始化向量data[i]。否则,向量为空,访问data[i]超出范围。此外,您需要iwhile循环内递增:

vector < vector<int> > data(10); // creates a vector of size 10,
                                 // each element being an empty vector of int's
int int_value;
for (int i=0; i < 10; i++)
{   
  cin >> int_value;
  data[i].push_back (int_value); // add int_value to the ith vector
}

在循环之后,每个向量都包含一个int用户输入的值。

于 2013-06-13T19:54:59.230 回答
1

data[i]不存在,因为vector的空构造函数创建了一个大小为0的vector。所以当你调用data[i]this时会越界。就像一维向量首先为数据分配足够的元素。在您的情况下,您似乎需要大小为 10 的数据:

vector < vector<int> > data(10);

此外,您永远不会增加iwhile 循环,这似乎会导致无限循环。

于 2013-06-13T19:56:59.627 回答
0

您有一个空的向量向量,并且您正在尝试访问它的元素 ( data[i])。push_back显然,在添加一些(通过resize或自身的其他方法)之前,您不能这样做data

于 2013-06-13T19:55:25.500 回答
0

问题是data[i]不存在。首先,您需要将 a 推vector<int>vector< vector<int> >向量中,然后您可以向其中添加整数。

于 2013-06-13T19:55:46.767 回答
0
vector < vector<int> > data;

data是一个空向量,它持有vector<int>

data[i].push_back (int_value);

data是空的。因此,做data[i]会导致未定义的行为。

于 2013-06-13T19:55:51.497 回答