我正在使用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
谢谢
答案 0 :(得分: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();
}