2012-12-23 27 views
-2

我使用dque將我從文件中讀取的某些元素推到deque的後面,但是當我從前面打印它們時,我只能得到最後一個元素deque使用front打印back元素而不使用front()

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

謝謝你的有用評論! 如果我沒有,我不會問 – Roola

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

感謝您的幫助, 我明白現在您的答案解決了問題。 – Roola