c++ Чтение вектора из файла
В текстовом файле записаны построчно векторы 0 и 1: (пример, 3 вектора) 00111001 10100100 10011010
Не получается прочитать даже первый вектор - долгая сборка, видимо память грузится. Пробую читать символы до конца строки \n, код ниже.
vector <bool> vec;
if (vec_file.is_open())
{
while (char ch = vec_file.get() != '\n')
{
vec_file.seekg(-1); // if char is not \n then go back and read as a boolean
bool temp = vec_file.get();
vec.push_back(temp); //add vector's element
}
}
vec_file.close();
print_vec(vec); //функция вывода вектора сама по себе работает
Выходит что-то очень-очень долгое. Подскажите, чем я так память огорчаю?..
Ответы (1 шт):
char ch = vec_file.get() != '\n'этой строчкой вы каждую итерацию получаете символ из файла и сравниваете его с\nа результат сравнения заносите вchи получается, что пока вы не дошли до\nу васchбудет = 1.То что вы хотели реализовать выглядит примерно таким образом:
char ch; while ((ch = vec_file.get()) != '\n')Вы сначала присваиваете
chсчитанный символ из файла, а потом уже проверяете его с\n.Далее внутри цикла я вообще не понял, вашу реализацию.
Вы уже прочитали символ в
chвсе что вам остается это добавить его вvecкакbool. Но т.к. код'0'и'1'это48и49соответственное (см. таблица ascii), то написав такую строчку:bool temp = ch;tempвсегда будет равна единице, т.к.trueэто все, что не0. В нашем случае это48и49. Так что вам нужно получить из символов'0'и'1'коды0и1соответственно.Чтобы получить из символа
'0'с кодом48код0нужно, логично, отнять48или'0'и уже его добавлять в вектор, то есть://vec.push_back(ch - 48); Равносильно строчке ниже vec.push_back(ch - '0'); //Проще для понимания
Чтобы вы не запутались, вот пример цикла, которые считывает символы до \n занося 0 и 1 в вектор:
char ch;
while ((ch = vec_file.get()) != '\n') {
vec.push_back(ch - '0');
}
Так же вы должны учитывать, что и последняя строчка должна быть окончена \n иначе произойдет бесконечный цикл.