1 #include<iostream> 2 #include<string.h> 3 #include<queue> 4 using namespace std; 5 6 int main() 7 { 8 string s, ssr = ""; 9 string ss = ""; 10 queue<char> q; 11 12 getline(cin, s); 13 int len = s.length(); 14 for(int i = 0; i < len; i++) 15 q.push(s[i]); 16 17 cout << q.size() << endl; 18 19 for(int i = 0; i < q.size(); i++) 20 { 21 cout << q.front(); 22 q.pop(); 23 } 24 cout << endl; 25 return 0; 26 }
按照上面的代码如果我输入:
Hello World Here I Come
我理解的是输出:
Hello World Here I Come
为什么运行的时候输出的是
Hello World
你好,关键的地方在于:
for(int i = 0; i < q.size(); i++) 20 { 21 cout << q.front(); 22 q.pop(); 23 }
你使用了for循环进行输出,但是要知道,你在for循环里q.pop() 之后q.size()就少一位了呀,所以for循环执行的次数根本没有25次,当执行到World的最后一个单词d的时候,i已经和q.size()一样大了。
输出队列的方法应该是while循环:
while(q.size()>0) { cout<<q.front(); q.pop(); }
谢谢你的回答。
@如若: 你好我曾经也是一个Acmer,我们互加一波好友吧
@Shendu.cc: 行,我已經加過了,剛纔看了下你的blog發現你刷了那麼多題肯定很厲害,以後有什麼不懂的地方,還希望向你請教。自己是一個二本院校非計算機專業的菜鳥,大一下接觸到acm然後就喜歡上了敲代碼,自己一個人學習的過程中也遇到了很多困難,還希望以後能夠向學長請教。
@如若: 你是男生还是女生