มีอะแดปเตอร์คอนเทนเนอร์ที่จะเปลี่ยนทิศทางของตัววนซ้ำเพื่อให้ฉันสามารถวนซ้ำในคอนเทนเนอร์โดยย้อนกลับด้วย for-loop for range
ด้วยตัววนซ้ำอย่างชัดเจนฉันจะแปลงสิ่งนี้:
for (auto i = c.begin(); i != c.end(); ++i) { ...
เป็นนี้
for (auto i = c.rbegin(); i != c.rend(); ++i) { ...
ฉันต้องการแปลงสิ่งนี้:
for (auto& i: c) { ...
สำหรับสิ่งนี้:
for (auto& i: std::magic_reverse_adapter(c)) { ...
มีอะไรแบบนี้หรือฉันต้องเขียนเองเหรอ?
begin
ไปend
หรือเพื่อจัดการกับสตรีมตัววนซ้ำและสิ่งที่ชอบ อัลกอริธึมแบบพิสัยจะยอดเยี่ยม แต่จริงๆแล้วมันเป็นแค่น้ำตาลซินแทคติก (ยกเว้นความเป็นไปได้ของการประเมินที่ขี้เกียจ) เหนืออัลกอริทึมตัววนซ้ำ
template<typename T> class reverse_adapter { public: reverse_adapter(T& c) : c(c) { } typename T::reverse_iterator begin() { return c.rbegin(); } typename T::reverse_iterator end() { return c.rend(); } private: T& c; };
สามารถปรับปรุงได้ (เพิ่มconst
รุ่น ฯลฯ ) แต่ใช้งานได้: vector<int> v {1, 2, 3}; reverse_adapter<decltype(v)> ra; for (auto& i : ra) cout << i;
พิมพ์321
template<typename T> reverse_adapter<T> reverse_adapt_container(T &c) {return reverse_adapter<T>(c);}
ดังนั้นคุณสามารถใช้for(auto &i: reverse_adapt_container(v)) cout << i;
เพื่อย้ำ
parallel_for
จะเป็นไปได้ด้วยเงื่อนไขที่แข็งแกร่งยิ่งขึ้น "ฉันไม่สนใจสิ่งที่จะเป็นระเบียบ" หากมันถูกรวมเข้ากับมาตรฐานในบางรูปแบบ แน่นอนว่ามันอาจมีน้ำตาลซิน