-2

我正在使用 dque 将我从文件中读取的一些元素推送到双端队列的后面,但是当我从前面打印它们时,我只得到最后一个元素

  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

谢谢

4

1 回答 1

2

您还没有提供 and 的声明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();
}
于 2012-12-23T12:12:37.073 回答