คำถามติดแท็ก iterator

iterator เป็นรูปแบบการเขียนโปรแกรมเชิงวัตถุที่ช่วยให้การแวะผ่านคอลเลกชันไม่เชื่อเรื่องการใช้งานจริงหรือวัตถุที่อยู่ในหน่วยความจำกายภาพ มันเป็นหนึ่งในรูปแบบการออกแบบเชิงพฤติกรรมของ Gang of Four

12
วิธีรับมุมมองรายการแบบย้อนกลับในรายการใน Java
ฉันต้องการให้มีมุมมองรายการแบบย้อนกลับในรายการ (ในลักษณะที่คล้ายกันกว่าList#sublistให้มุมมองรายการย่อยในรายการ) มีฟังก์ชั่นที่ให้ฟังก์ชั่นนี้บ้าง? ฉันไม่ต้องการทำสำเนารายการหรือแก้ไขรายการ มันจะเพียงพอถ้าฉันได้อย่างน้อย iterator กลับรายการในกรณีนี้แม้ว่า นอกจากนี้ฉันรู้วิธีที่จะใช้ตัวเอง ฉันแค่ถามว่า Java ให้อะไรเช่นนี้แล้ว การสาธิตการใช้งาน: static <T> Iterable<T> iterableReverseList(final List<T> l) { return new Iterable<T>() { public Iterator<T> iterator() { return new Iterator<T>() { ListIterator<T> listIter = l.listIterator(l.size()); public boolean hasNext() { return listIter.hasPrevious(); } public T next() { return listIter.previous(); } public …

7
วิธีการเลือกเพียงหนึ่งรายการจากเครื่องกำเนิดไฟฟ้า?
ฉันมีฟังก์ชั่นเครื่องกำเนิดไฟฟ้าดังนี้: def myfunct(): ... yield result วิธีปกติในการเรียกใช้ฟังก์ชันนี้คือ: for r in myfunct(): dostuff(r) คำถามของฉันมีวิธีที่จะได้รับเพียงหนึ่งองค์ประกอบจากเครื่องกำเนิดไฟฟ้าเมื่อใดก็ตามที่ฉันชอบ? ตัวอย่างเช่นฉันต้องการทำสิ่งที่ชอบ: while True: ... if something: my_element = pick_just_one_element(myfunct()) dostuff(my_element) ...


5
C ++ STL Vectors: รับตัววนซ้ำจากดัชนีหรือไม่
ดังนั้นฉันจึงเขียนโค้ดที่เข้าถึงองค์ประกอบใน stl เวกเตอร์โดย index [] แต่ตอนนี้ฉันต้องคัดลอกอันของเวกเตอร์ ดูเหมือนว่าvector.insert(pos, first, last)เป็นฟังก์ชั่นที่ฉันต้องการ ... ยกเว้นฉันจะมีครั้งแรกและครั้งสุดท้ายเป็น ints มีวิธีที่ดีที่ฉันสามารถใช้ตัววนซ้ำตามค่าเหล่านี้หรือไม่?
200 c++  stl  vector  iterator 

7
เหตุใดจึงต้องใช้ฟังก์ชันเริ่มต้นและสิ้นสุดที่ไม่ใช่สมาชิกใน C ++ 11
คอนเทนเนอร์มาตรฐานทุกตัวมี a beginและendเมธอดสำหรับส่งคืนตัววนซ้ำสำหรับคอนเทนเนอร์นั้น อย่างไรก็ตาม C ++ 11 ได้เปิดตัวฟังก์ชั่นฟรีที่เรียกว่าstd::beginและฟังก์ชั่นการstd::endโทรbeginและendสมาชิก ดังนั้นแทนที่จะเขียน auto i = v.begin(); auto e = v.end(); คุณต้องการเขียน auto i = std::begin(v); auto e = std::end(v); ในคำพูดของเขาการเขียน Modern C ++ Herb Sutter บอกว่าคุณควรใช้ฟังก์ชั่นฟรีทันทีเมื่อคุณต้องการเริ่มต้นหรือสิ้นสุดตัววนซ้ำสำหรับคอนเทนเนอร์ อย่างไรก็ตามเขาไม่ได้ลงรายละเอียดว่าทำไมคุณถึงต้องการ การดูรหัสจะช่วยให้คุณประหยัดอักขระทั้งหมดหนึ่งตัว ดังนั้นเท่าที่ภาชนะมาตรฐานไปฟังก์ชั่นฟรีดูเหมือนจะไร้ประโยชน์อย่างสมบูรณ์ Herb Sutter ระบุว่ามีประโยชน์สำหรับภาชนะที่ไม่ได้มาตรฐาน แต่อีกครั้งเขาไม่ได้ลงรายละเอียด ดังนั้นคำถามคือสิ่งที่รุ่นฟังก์ชั่นอิสระของstd::beginและstd::endทำนอกเหนือจากการเรียกรุ่นฟังก์ชั่นสมาชิกที่สอดคล้องกันและทำไมคุณต้องการที่จะใช้พวกเขา?



2
วิธีที่เร็วที่สุดในการแปลงตัววนซ้ำเป็นรายการ
มีiteratorวัตถุมีบางสิ่งที่เร็วกว่าดีกว่าหรือถูกต้องกว่า list comprehension เพื่อรับรายการของวัตถุที่ส่งคืนโดย iterator หรือไม่? user_list = [user for user in user_iterator]

16
เหตุใด Iterator ของ Java จึงไม่ใช่ Iterable
ทำไมIteratorอินเตอร์เฟซที่ไม่ขยายIterable? วิธีการก็จะกลับมาiterator()this มันเป็นไปตามวัตถุประสงค์หรือเป็นเพียงการกำกับดูแลของนักออกแบบของ Java หรือไม่? มันจะสะดวกที่จะใช้ลูปสำหรับแต่ละลูปกับตัววนซ้ำเช่นนี้: for(Object o : someContainer.listSomeObjects()) { .... } โดยที่listSomeObjects()ส่งคืนตัววนซ้ำ
178 java  iterator  iterable 


2
ตัววนซ้ำ -> วินาทีหมายความว่าอะไร
ใน C ++ ประเภทของ a std::map<>::iteratorคืออะไร? เรารู้ว่าอ็อบเจกต์itประเภทstd::map<A,B>::iteratorมีการโอเวอร์โหลดoperator ->ซึ่งส่งคืน a std::pair<A,B>*และว่าstd::pair<>มีfirstและsecondสมาชิก แต่สมาชิกสองคนนี้ทำอะไรกันและทำไมเราต้องเข้าถึงค่าที่เก็บไว้ในแผนที่ด้วยit->second?
157 c++  stl  iterator 

4
Ruby: จะวนซ้ำช่วงอย่างไร แต่เพิ่มทีละชุด?
ดังนั้นฉันซ้ำในช่วงดังนี้: (1..100).each do |n| # n = 1 # n = 2 # n = 3 # n = 4 # n = 5 end แต่สิ่งที่ฉันต้องการทำคือทำซ้ำโดย 10's ดังนั้นแทนที่จะเพิ่มขึ้นn1, อันถัดไปnก็คือ 10, 20, 30 เป็นต้น
156 ruby  iterator  increment 

12
วนซ้ำผ่านเวกเตอร์ C ++ โดยใช้ลูป 'for'
ฉันยังใหม่กับภาษา C ++ ฉันเริ่มใช้เวกเตอร์และสังเกตเห็นว่าในโค้ดทั้งหมดที่ฉันเห็นว่าจะวนซ้ำแม้ว่าเวกเตอร์ผ่านดัชนีพารามิเตอร์แรกของforลูปมักจะขึ้นอยู่กับเวกเตอร์เสมอ ใน Java ฉันอาจทำสิ่งนี้ด้วย ArrayList: for(int i=0; i < vector.size(); i++){ vector[i].doSomething(); } มีเหตุผลที่ฉันไม่เห็นสิ่งนี้ใน C ++ หรือไม่? ปฏิบัติไม่ดีหรือไม่?

8
การลบองค์ประกอบออกจาก std :: set ในขณะที่วนซ้ำ
ฉันต้องผ่านชุดและลบองค์ประกอบที่ตรงตามเกณฑ์ที่กำหนดไว้ล่วงหน้า นี่คือรหัสทดสอบที่ฉันเขียน: #include <set> #include <algorithm> void printElement(int value) { std::cout << value << " "; } int main() { int initNum[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 }; std::set<int> numbers(initNum, initNum + 10); // print '0 1 2 3 4 5 6 7 …

6
Python แสดงรายการตัววนซ้ำและตัวถัดไป (ตัววนซ้ำ)
พิจารณา: >>> lst = iter([1,2,3]) >>> next(lst) 1 >>> next(lst) 2 ดังนั้นความก้าวหน้าของตัววนซ้ำก็เป็นไปตามที่คาดการณ์ไว้จัดการโดยการกลายพันธุ์วัตถุเดียวกัน ในกรณีนี้ฉันคาดหวังว่า: a = iter(list(range(10))) for i in a: print(i) next(a) เพื่อข้ามทุกองค์ประกอบที่สอง: การเรียกร้องให้nextควรล่วงหน้า iterator ครั้งเดียวแล้วโทรนัยทำโดยวงควรล่วงหน้าเป็นครั้งที่สอง - iและผลของการโทรที่สองนี้จะได้รับการมอบหมายให้ มันไม่ได้ ลูปจะพิมพ์รายการทั้งหมดในรายการโดยไม่ข้ามอะไรเลย ความคิดแรกของฉันคือว่าเรื่องนี้อาจจะเกิดขึ้นเพราะห่วงเรียกร้องiterในสิ่งที่มันจะผ่านไปและอาจให้ iterator อิสระ - iter(a) is aนี้ไม่ได้เป็นกรณีที่เรามี ดังนั้นทำไมnextไม่ปรากฏตัวเลื่อนซ้ำในกรณีนี้?

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.