我从代码中遇到两个错误。我相信他们与我创建了一个载体对象的事实有关,该矢量对象拥有int
类型的向量对象(即向量的向量(。当我尝试使用下标运算符访问向量对象中的向量数组时,我会收到一条与此帖子标题相同的错误消息。
这是我的代码:
int main()
{
vector<int> M;
vector<vector<int>> cases;
int numberOfCase;
cin >> numberOfCase;
for(int i = 1; i <= numberOfCase; i++)
{
int s;
cin >> s;
for(int j = 1; j <= s; j++)
cin >> M[j];
cases.push_back(M);
}
// determine size of M;
vector<int> seen;
for(int i = 1; i <= cases.size(); i++)
{
for(int j = 1; j < cases[i].size(); j++)
{
for(int w = 1; w < seen.size(); w++)
{
if(cases[i].[j] == seen[w]);// error
else
seen.push_back(cases[i].[j]); // error
}
}
}
for(int i = 1; i <= seen.size(); i++)
cout << seen[i] << " ";
}
您不能这样做索引访问:
if(cases[i].[j] == seen[w]);
else
seen.push_back(cases[i].[j]);
用:
替换它 if(cases[i][j] == seen[w]);
else
seen.push_back(cases[i][j]);
注意删除的点。
您为什么要进行如此非常规的if
结构?我将其写为
if(cases[i][j] != seen[w])
seen.push_back(cases[i][j]);
旁注:正如其他人所指出的(我已经注意到自己:((,您的代码中还有许多其他错误和不幸:
- 您正在尝试使用1个基于1个索引。C使用基于0的索引,因此您的循环在类似数组的对象上应从0到
< array_length
-
cin >> M[j];
无效,因为vector
是空的。在向量中读取int
和.push
- 您应该在阅读循环的每次迭代中清空
M
向量,否则它仍然包含上一个迭代中的值(我确定那不是您想要的(
基于您遇到的错误,您的问题在于这些代码的行:
for(int j = 1; j < cases[i].size(); j++)
{
for(int w = 1; w <= seen.size(); w++)
{
if(cases[i].[j] == seen[w]); //here
else
seen.push_back(cases[i].[j]); //here
}
}
错误是[i]
和[j]
之间存在一个点,这导致了TH错误。只需删除即可。
您遇到的另一个问题是向量索引从0而不是1开始,并且它们的结尾为大小,因此数字必须小于不小于大小,并且索引应在0开始。