deque使用front()打印背面元素而不是正面

时间:2012-12-23 11:52:13

标签: c++ deque

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

谢谢

1 个答案:

答案 0 :(得分:2)

您尚未提供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();
}