在這裏,我寫了一個簡單隊列類模板:C++:STD的順序::法院
#include "stdafx.h"
#include "iostream"
#include "conio.h"
template <class T> class Queue {
private:
struct Node {
T value;
Node *next;
};
Node *first, *last;
public:
Queue() { //Initialization
first = 0;
last = 0;
};
void push(T value) { //Put new value into Queue
Node *p = new Node;
p->value = value;
if (!first) //If Queue is not empty
first = p;
else
last->next = p;
last = p; //Put the value to the last of the Queue
};
T get() { //Get the first value of the Queue
return (first) ? first->value : NULL;
};
T pop() { //Take the first value out of Queue
T result = first->value;
Node *temp = first;
first = first->next;
delete temp;
return result;
};
};
int _tmain(int argc, _TCHAR* argv[])
{
Queue<int> bag;
bag.push(1); //Bag has value 1
bag.push(2); //Bag has values: 1, 2
std::cout << bag.get() << '\n' << bag.pop() << '\n' << bag.pop();
_getch();
return 0;
}
有一個問題 - 輸出爲:
0
2
1
/*
Correct output should be:
1
1
2
*/
當調試的std::cout
行,我發現程序調用bag.pop()
在最右邊的第一個,然後bag.pop()
,最後bag.get()
。 這是正確的順序嗎?
的順序是不確定的,如果你需要一個特定的順序您的cout語句分成三段。 'std :: cout << bag.get()<<'\ n'; std :: cout << bag.pop()<<'\ n'; std :: cout << bag.pop();' – john
如果你搜索了,你會發現一些答案:[cout <<打印函數的調用順序?](http://stackoverflow.com/questions/2129230/ cout-order-of-call-to-functions-it-prints/2129242#2129242)&[使用std :: cout評估參數的順序](http://stackoverflow.com/questions/7718508/order-of-評估的參數使用stdcout) – crashmstr
如果模板類型'T'不是一個指針?那麼你不能在'get'函數中返回'NULL'(除非'T'是一個可以從整數'0'隱式創建的類型)。 –