Deque使用front()打印后元素而不是前元素

deque prints back element instead of the front using front()

本文关键字:元素 打印 使用 front Deque      更新时间:2023-10-16

我使用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

Thank you

您没有提供linequ的声明,但我可以猜测它们是

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