Я использую 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
Спасибо
Вы не предоставили декларации для 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();
}
Других решений пока нет …