我从代码中得到两个错误。我相信它们与我创建了一个矢量对象这一事实有关,该矢量对象包含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] << " ";
}
答案 0 :(得分:3)
您不能像这样进行索引访问:
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]);
侧面注意:正如其他人指出的那样(我已经注意到了自己:)),您的代码中还有许多其他错误和错误:
< array_length
cin >> M[j];
无效,因为vector
为空。在矢量int
和.push
M
向量,否则它仍将包含上一次迭代的值(我确定不是你想要的)答案 1 :(得分:2)
根据您的错误,您的问题在于以下几行代码:
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]
之间有一个点,导致错误。只需删除它。
你遇到的另一个问题是矢量索引从0开始,而不是1,它们以大小结束,所以数字必须小于,不小于等于大小,索引应该从0开始。