include <queue>
using namespace std;
char msg[1000];
現在,我想擁有一個隊列,可以存儲5種這類味精。所以,它是一個包含5個字符數組的5號隊列,每個數組最多可以包含1000個字符。排列字符的隊列
如何啓動隊列?我試過這個,但沒有奏效。
char msg[1000];
queue<msg> p;
include <queue>
using namespace std;
char msg[1000];
現在,我想擁有一個隊列,可以存儲5種這類味精。所以,它是一個包含5個字符數組的5號隊列,每個數組最多可以包含1000個字符。排列字符的隊列
如何啓動隊列?我試過這個,但沒有奏效。
char msg[1000];
queue<msg> p;
編輯:std :: vector可能是更好的選擇,只是重讀你的問題,看到字符數組的大小。如果您正在使用它來存儲二進制數據,則std::queue< std::vector <char> > msgs
可能是您的最佳選擇。
您不能使用變量作爲類型。儘管你可以有一個字符指針隊列。
#include <iostream>
#include <queue>
std::queue <char*> msgs;
int main()
{
char one[50]="Hello";
msgs.push(one);
char two[50]="World\n\n";
msgs.push(two);
msgs.push("This works two even though it is a const character array, you should not modify it when you pop it though.");
while(!msgs.empty())
{
std::cout << msgs.front();
msgs.pop();
}
return 1;
}
你也可以使用std :: string並避免錯誤。如果你使用的是char*
,你需要一個函數來向隊列中添加信息,它們不能在堆棧上(即你需要用new
或malloc
創建它們),比你在處理隊列時必須記得刪除它們。要確定一個人是在全球空間,一個是在堆棧中,還是一個是在新的空間中,將沒有簡單的方法。未處理正確時會導致未定義的行爲或內存泄漏。 std::string
可以避免所有這些問題。
#include <iostream>
#include <queue>
#include <string>
std::queue <std::string> msgs;
int main()
{
msgs.push("Hello");
msgs.push("World");
while(!msgs.empty())
{
std::cout << msgs.front();
msgs.pop();
}
return 1;
}
如果只是5標準的消息,然後const char*
將是一個不錯的選擇,但如果他們總是相同的郵件,你應該考慮引用到你想要的消息整數的隊列。這樣你可以將更多的操作與它聯繫起來。但是,你也可以考慮一個對象隊列。
#include <iostream>
#include <queue>
std::queue <int> msgs;
int main()
{
msgs.push(1);
msgs.push(2);
while(!msgs.empty())
{
switch(msgs.front())
{
case 1:
std::cout << "Hello";
break;
case 2:
std::cout << "World";
break;
default:
std::cout << "Unkown Message";
}
msgs.pop();
}
return 1;
}
非常感謝!它的工作原理 –
謝謝。我做了'deque
我不知道什麼newString()是,但我認爲消息應該只是我在這種情況下的字符* ...你可以發佈什麼newString做你的問題? –
struct msg {
char data[1000];
};
queue<msg> p;
msg
是一個數組,而不是一個類型。由於數組不可複製,所以這不會起作用。爲什麼不是std::queue<std::string>
呢?
感謝您的建議,但我不得不使用char *這次 –
@JJLiu:爲什麼?這很愚蠢。 –
首先,你需要在你的include語句前加'#'符號。其次,當你聲明隊列時,你把你想要它包含的類型放在尖括號中(在你的情況下是'char *'),而不是像'msg'這樣的變量名。
+1反擊匿名downvoter。據我所知,這個答案沒有錯。 –
謝謝,答案很好 –
@AlfP。Steinbach:我基本上同意,除了「取消」別人的投票權不是你的工作。這真的是一個值得讚賞的「偉大」答案嗎? –
什麼不起作用?編譯器錯誤? –
'std :: string'是整潔的。 – AusCBloke
@JoeMcGrath謝謝。我做了'deque QUEUE; while(1){char msg [1000]; msg = newString(); QUEUE.push(MSG); }'。然後我發現隊列中的所有元素都是相同的,因爲它們引用了同樣的東西'msg'。我該如何解決這個問題? –