deque печатает задний элемент вместо переднего, используя front ()

Я использую dque, чтобы протолкнуть некоторые элементы, которые я прочитал, из файла в конец deque, но когда я печатаю их спереди, я получаю только последний элемент

  fgets(line,100,file);
qu.push_back(line);
fgets(line,100,file);
qu.push_back(line);
fgets(line,100,file);
qu.push_back(line);
fgets(line,100,file);
qu.push_back(line);

while(!qu.empty())
{
puts(qu.front());
qu.pop_front();
}

образец ввода

a
b
c
d

выход

d
d
d
d

Спасибо

-2

Решение

Вы не предоставили декларации для line а также qu, но я могу догадаться, что они

char line[100];
std::dequeue<char*> qu;

Это означает qu хранит указатели на внешние qu) буфер с символами в нем. В вашей программе у вас есть только один буфер (line), чей адрес неоднократно вставляется в qu, но чье содержимое перезаписывается с каждым fgets вызов.

Пока вы изучаете C ++, старайтесь как можно больше держаться подальше от указателей. Итак, вместо использования char* для строк, используйте std::string:

std::string line;
std::deque<std::string> qu;

getline(std::cin, line);
qu.push_back(line);
getline(std::cin, line);
qu.push_back(line);
getline(std::cin, line);
qu.push_back(line);
getline(std::cin, line);
qu.push_back(line);

while(!qu.empty())
{
std::cout << qu.front() << std::endl;
qu.pop_front();
}
2

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

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector