如何在不使用for
循環的情況下從隊列中獲取前五個元素?如何從隊列中獲取前5個元素C++
回答
你爲什麼要這麼做?也許你不得不在手邊持有5個元素,因爲這裏不明確。
無論如何 - 如果你是指STL <queue>
:
std::queue<Element> container;
Element e1, e2, e3, e3, e5;
e1 = container.front();
container.pop();
e2 = container.front();
container.pop();
e3 = container.front();
container.pop();
e4 = container.front();
container.pop();
e5 = container.front();
container.pop();
行爲是不確定的,如果在queue
< 5個元素。
如果您想避免Element
副本,您可以用下面的代碼替換它,但在這種情況下請注意,在引用的元素被彈出後引用變爲無效。
std::queue<Element> container;
Element& e1 = container.front(); // or const Element&
container.pop();
Element& e2 = container.front();
container.pop();
Element& e3 = container.front();
container.pop();
Element& e4 = container.front();
container.pop();
Element& e5 = container.front();
container.pop();
該代碼不起作用。聲明'e1'作爲參考意味着您需要立即初始化它。 – 2010-09-29 11:03:15
@Konrad,thx,現在刪除 – 2010-09-29 11:04:43
編輯並恢復 – 2010-09-29 11:25:51
#include <iostream>
#include <queue>
int main(){
std::queue<std::string> q;
for (int i = 0; i<5; ++i){
std::string s;
std::cin >> s;
q.push(s);
}
int itemsToFetch = 5;
do{
std::string curString = q.front();
q.pop();
std::cout << curString << std::endl;
--itemsToFetch;
} while (itemsToFetch > 0 && !q.empty());
return 0;
}
沒有顯式循環都:
#include <iostream>
#include <queue>
#include <vector>
#include <algorithm>
template <typename T>
class QueuePopper
{
public:
QueuePopper(std::queue<T> &q) : q(q) {}
T operator() (const T &) { T t = q.front(); q.pop(); return t; }
private:
std::queue<T> &q;
};
int main()
{
typedef std::string T;
std::queue<T> q;
...
std::vector<T> v(5);
std::transform(v.begin(), v.end(), v.begin(), QueuePopper<T>(q));
}
在這個解決方案隱藏循環存在'變換',那麼你的循環隱藏的邊界在哪裏?我可以將循環導出到其他文件,這是一樣的。 – Svisstack 2010-09-29 11:51:16
@Svisstack:當然。這是一個人爲的場景!但我沒有必要真的*寫*循環。 – 2010-09-29 12:00:14
另一種方式:
template<int n> void GetElements(queue<string>& qu)
{
if(!qu.empty())
{
cout << qu.front() << '\n';
qu.pop();
}
GetElements<n-1>(qu);
}
template<> void GetElements<0>(queue<string>& qu) {}
// and call:
GetElements<5>(qu);
或者:
switch(qu.size())
{
default: cout << qu.front() << '\n'; qu.pop();
case 4: cout << qu.front() << '\n'; qu.pop();
case 3: cout << qu.front() << '\n'; qu.pop();
case 2: cout << qu.front() << '\n'; qu.pop();
case 1: cout << qu.front() << '\n'; qu.pop();
case 0: ;
}
+1,因爲每次看到它,我發現第二個構造非常聰明。 – ereOn 2010-09-29 12:04:26
- 1. 從C#列表中獲取前幾個元素#
- 2. 如何使用單個查詢從不同列中獲得前5個元素?
- 3. 隊列中前n個元素
- 4. C++:高效地獲取/放入多個元素的隊列?
- 5. 如何在C#中獲得列表的前N個元素?
- 6. 獲取隊列c中元素的索引#
- 7. 如何從多個輸入中獲取某個元素C++
- 8. 如何從列表中獲取元素的頻率c#
- 9. 從C代碼的隊列中讀取給定的元素
- 10. 如何從DOM元素中獲取文本值Tapestry 5
- 11. 如何從輸入中獲取某個元素(C++)
- 12. 如何使用c#中的LINQ從xml列表中獲取單個元素?
- 13. 如何使用LinQ獲取列表的前N個元素?
- 14. 如何從排序列表中獲取第一個元素?
- 15. 如何從SML中的元組列表中獲取元素?
- 16. C++ 11。如何從沒有const的元組中獲取元素
- 17. 如何從C++中的每個節點使用隊列搜索元素?
- 18. 獲取C#中的XSD元素列表
- 19. 如何獲取當前元素高度?
- 20. 如何獲取當前元素屬性
- 21. Win32 C++從元素中獲取文本
- 22. C#排序列表:如何獲取下一個元素?
- 23. 從多個文件中讀取前兩個元素C++
- 24. 從詞典列表中獲取前5個值?
- 25. 如何從元素中獲取文本
- 26. 我如何從clojure中獲取元素?
- 27. 如何從類元素中獲取值?
- 28. 如何從Java ArrayList中獲取元素
- 29. 如何從網格中獲取元素
- 30. 如何從數組中獲取元素。
什麼樣的隊列? – 2010-09-29 11:00:29
隊列包含字符串值 – cje 2010-09-29 11:01:34
使用while循環 –
2010-09-29 11:01:52