khi tôi đồng ý với những người khác rằng việc sử dụng trực tiếp của một iterable container là một giải pháp ưa thích, tôi muốn chỉ ra rằng tiêu chuẩn C++ đảm bảo đủ hỗ trợ cho một giải pháp do-it-yourself trong trường hợp bạn muốn nó vì bất kỳ lý do gì.
Cụ thể, bạn có thể kế thừa từ std::queue
và sử dụng thành viên được bảo vệ Container c;
để truy cập bắt đầu() và cuối() của vùng chứa cơ bản (miễn là phương pháp đó tồn tại ở đó). Dưới đây là một ví dụ mà làm việc trong VS 2010 và tested with ideone:
#include <queue>
#include <deque>
#include <iostream>
template<typename T, typename Container=std::deque<T> >
class iterable_queue : public std::queue<T,Container>
{
public:
typedef typename Container::iterator iterator;
typedef typename Container::const_iterator const_iterator;
iterator begin() { return this->c.begin(); }
iterator end() { return this->c.end(); }
const_iterator begin() const { return this->c.begin(); }
const_iterator end() const { return this->c.end(); }
};
int main() {
iterable_queue<int> int_queue;
for(int i=0; i<10; ++i)
int_queue.push(i);
for(auto it=int_queue.begin(); it!=int_queue.end();++it)
std::cout << *it << "\n";
return 0;
}
Nguồn
2011-05-12 20:39:57
Trong khi tôi biết những gì bạn đang nói, tôi đã luôn luôn không thích cụm từ này "một cái gì đó nhiều hơn một hàng đợi". Một hàng đợi với liệt kê vẫn là một hàng đợi ... Ngoài ra, hãy quan sát cách 'deque' chỉ xảy ra để hỗ trợ điều tra, hoàn toàn tùy ý. Bạn cũng có thể tranh luận rằng 'deque' nên thuần túy như' hàng đợi' và không hỗ trợ lặp lại, và nếu bạn muốn lặp lại nó thì bạn muốn cái gì đó "nhiều hơn"; ví dụ. một 'deque_enumerable'. Đó là một con dốc trơn mặc dù, và cảm giác cá nhân của tôi là 'hàng đợi' nên có hỗ trợ liệt kê ở nơi đầu tiên. –
@romkyns: Sẽ tốt hơn nếu tôi nhắc lại nó: "Bạn cần một cái gì đó có giao diện phong phú hơn giao diện' xếp hàng' để bạn nên chọn một đối tượng có giao diện phù hợp ". Giống như nó hay không, lặp lại không phải là một phần của giao diện 'hàng đợi' vì vậy nếu bạn muốn lặp lại, bạn cần phải chọn một cái gì đó khác. –
Bởi vì trường hợp sử dụng của tôi yêu cầu một hàng đợi, nhưng tôi cần phải đổ nó ra cho mục đích gỡ lỗi và ghi nhật ký. Nó thường không mang tính xây dựng để cho rằng áp phích không biết họ đang làm gì. – EML