2013-01-25 152 views
2

大家好我可以使用矢量而不是隊列嗎?我只是想使用不同的線程推入和彈出內存。而且我還需要在彈出後刪除數據。在隊列上使用向量有什麼優勢嗎?我可以使用C++矢量插入FIFO隊列排隊

在此先感謝...

回答

3

矢量類似於堆棧而不是隊列。你只能從一側推動和彈出,而不能從一個推動並從另一個彈出。一個向量可以讓你在常量時間內通過它的索引訪問任意元素,但是不能從其開始有效地移除元素。

+0

理論上可以,但你必須自己轉變的元素,以覆蓋空白 – vsz

+0

我說'不能夠有效地...'你可以,但使用矢量時不能有效地 –

+0

所以FIFO不可能我對嗎? – Haris

8

這不明智,因爲隊列是FIFO,所以你需要從你推入的另一端彈出。爲此,要使用的結構是std::deque,這是std::queue默認情況下使用的結構。

+0

嗨,感謝您的回覆 – Haris

4

對隊列使用vector會迫使您從vector的第一個位置插入或刪除元素。該向量作爲一個單獨的內存塊被包含,並且這種操作是昂貴的。隊列可以更有效地實現。

0

如果你確實需要一個FIFO的向量,你可以使用insert()pop_back()

std::vector<glm::vec3> m_vertices; 
glm::vec3 point1 = glm::vec3(); 
glm::vec3 point2 = glm::vec3(); 

m_vertices.insert(m_vertices.begin(), point1) ; 

m_vertices.pop_back(); 
m_vertices.insert(m_vertices.begin(), point2);