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);
        }
    }}

2 ответа

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

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

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

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

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

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

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

    text>>a;

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

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

while ( text >> a )
Другие вопросы по тегам