【发布时间】:2016-05-17 20:17:18
【问题描述】:
我不断收到错误消息:Vector subscript out of range 。我花了一个小时试图找出为什么我一直得到它,这可能是显而易见的,但我看不到它。从试图找出问题所在的反复试验中,我设法将其缩小到第二个 while() 但仍然 。欢迎任何帮助。谢谢。
fstream text("text.txt",ios::in);
vector <char> arr;
vector <int> freq;
char a;
if(!text)
{
cout<<"\nError!\n"<<endl;
return;
}
else
{
//-------------//initializing first element of each vector
text>>a;
arr.push_back(a);
freq.push_back(1);
//-----------//
while(!text.eof())
{
text>>a;
unsigned i=0;
while(a != arr[i] && i < arr.size())
i++;
if(i < arr.size())
freq[i]++;
else
{
arr.push_back(a);
freq.push_back(1);
}
}}
【问题讨论】:
-
调试!单步执行您的代码...
-
我认为您的意思是使用
if(i < freq.size())而不是if(i < arr.size())。另见:Why is iostream::eof inside a loop condition considered wrong? -
while(a != arr[i] && i < arr.size()) i++;-- 当i是arr.size() - 1时,会发生另一个迭代。现在i等于arr.size(),所以它指向数组的末尾。然后你在a != arr[i]中使用它——繁荣。在 while 循环中切换这些条件。 -
嗯,感谢 Dan,这似乎是问题所在,感谢其他人的建议。 :)
标签: c++ vector range out subscript