Я продолжаю получать сообщение об ошибке: векторный индекс выходит за пределы допустимого диапазона. Я потратил час, пытаясь выяснить, почему я продолжаю получать это, это может быть что-то очевидное, но я не вижу этого. Путем проб и ошибок, пытаясь выяснить, где проблема, мне удалось сузить ее до второго 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);
}
}}
Вы должны поменять условия в заявлении while
while ( i < arr.size() && a != arr[i] ) i++;
Также это условие неверно
while(!text.eof())
{
text>>a;
Состояние eof может возникнуть после утверждения
text>>a;
в блоке времени.
Измените это на
while ( text >> a )
Из-за этого блока кода вы получаете его.
поскольку в самом начале размер массива freq равен 1, поэтому его более высокий индекс равен 0, но когда вы обращаетесь к данным в freq по индексу индекса i, который стал i ++, т.е. 1 всегда будет пытаться получить доступ к freq [1], который никогда не существует
if(i < arr.size())
freq[i]++;