我有二维向量的问题。例如:
vector < vector<int> > data;
int i = 0;
int int_value;
while (i < 10 )
{
cin >> int_value;
data[i].push_back (int_value);
}
我想使用push_back进行后插入,然后我想使用data [i] [j]。问题在哪里?
答案 0 :(得分:4)
您需要在使用data
之前初始化向量data[i]
。否则,向量为空,访问data[i]
超出范围。此外,您需要在i
循环中增加while
:
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
值。
答案 1 :(得分:1)
data[i]
不存在,因为vector的空构造函数创建了一个大小为0的向量。因此,当您调用data[i]
时,这将超出范围。就像一维向量一样,首先为数据分配足够的元素。在您的情况下,您似乎需要大小为10的数据:
vector < vector<int> > data(10);
此外,你永远不会在while循环中增加i
,这似乎会导致无限循环。
答案 2 :(得分:0)
您有一个空矢量向量,并且您正在尝试访问其元素(data[i]
)。显然,在添加一些内容之前,您无法执行此操作(通过push_back
,resize
或其他data
方法本身。)
答案 3 :(得分:0)
问题是data[i]
不存在。首先,您需要将vector<int>
推入vector< vector<int> >
向量,然后才能向其中添加整数。
答案 4 :(得分:0)
vector < vector<int> > data;
data
是一个空的向量,其中包含vector<int>
。
data[i].push_back (int_value);
data
为空。因此,执行data[i]
会导致未定义的行为。