1HAWK1
@1HAWK1

Код не успевает выполниться.С++.Что делать?

int main()
{
    string text;
    srand(time(NULL));                        //рандом
    rand();
    int n = 29999;                             //0-29999
    int randomQuestion = rand() % (n + 1);

    ifstream file("1.txt");//путь к файлу
    char open_file[400];
    int index = -1;
    do
    {
        index++;
        if (index == randomQuestion) text = open_file; //Проверка номера строки
        file.getline(open_file, 400);//считывает одну строку файла
    } while (!file.eof());
    cout << text;
}
Код должен вытягивать 1 строку из более 30тыс. строк. Код это не выводит. Когда делаю с базой в 1000, всё работает. Задержки ставил, не помогло. Что делать?
  • Вопрос задан
  • 165 просмотров
Пригласить эксперта
Ответы на вопрос 1
wataru
@wataru Куратор тега C++
Разработчик на С++, экс-олимпиадник.
Можно ускорить, если вместо чтения построчно читать по несколько килобайт (ifstream::read) и считать количество символов перевода строки, пока не отсчитаете нужное количество. Потом от нужного символа перевода строки поискать, есть ли там следующий перевод строки или конец файла уже в буфере. Если есть - вот и ваша строка уже в памяти. Иначе берете все до конца буфера и приписываете к этому из файла новую строку.

Можно поиск символов перевода строки ускорить всякими SIMD инструкциями.

Но вообще, у вас файл маленький, не должно быть проблем со скоростью.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы