C ++: векторный индекс вне диапазона

Я продолжаю получать сообщение об ошибке: векторный индекс выходит за пределы допустимого диапазона. Я потратил час, пытаясь выяснить, почему я продолжаю получать это, это может быть что-то очевидное, но я не вижу этого. Путем проб и ошибок, пытаясь выяснить, где проблема, мне удалось сузить ее до второго 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);
}
}}

-5

Решение

Вы должны поменять условия в заявлении while

while ( i < arr.size() && a != arr[i] ) i++;

Также это условие неверно

while(!text.eof())
{
text>>a;

Состояние eof может возникнуть после утверждения

    text>>a;

в блоке времени.

Измените это на

while ( text >> a )
0

Другие решения

Из-за этого блока кода вы получаете его.
поскольку в самом начале размер массива freq равен 1, поэтому его более высокий индекс равен 0, но когда вы обращаетесь к данным в freq по индексу индекса i, который стал i ++, т.е. 1 всегда будет пытаться получить доступ к freq [1], который никогда не существует

if(i < arr.size())
freq[i]++;
0

По вопросам рекламы [email protected]