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

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

30
คำหลัก "ผลผลิต" ทำหน้าที่อะไร
การใช้yieldคำหลักใน Python คืออะไรและใช้ทำอะไร? ตัวอย่างเช่นฉันพยายามที่จะเข้าใจรหัสนี้1 : def _get_child_candidates(self, distance, min_dist, max_dist): if self._leftchild and distance - max_dist < self._median: yield self._leftchild if self._rightchild and distance + max_dist >= self._median: yield self._rightchild และนี่คือผู้โทร: result, candidates = [], [self] while candidates: node = candidates.pop() distance = node._get_dist(obj) if distance <= max_dist and distance …

6
วิธีการวนซ้ำสองรายการในแบบคู่ขนานได้อย่างไร
ฉันมีสอง iterables ในหลามและฉันต้องการไปพวกเขาเป็นคู่: foo = (1, 2, 3) bar = (4, 5, 6) for (f, b) in some_iterator(foo, bar): print "f: ", f, "; b: ", b มันควรจะส่งผลใน: f: 1; b: 4 f: 2; b: 5 f: 3; b: 6 วิธีหนึ่งในการทำเช่นนี้คือการย้ำเหนือดัชนี: for i in xrange(len(foo)): print "f: ", foo[i], "; …



6
กฎการยกเลิก Iterator
กฎการตรวจสอบความถูกต้องของตัววนซ้ำสำหรับคอนเทนเนอร์ C ++ มีอะไรบ้าง โดยเฉพาะอย่างยิ่งในรูปแบบรายการสรุป (หมายเหตุ: นี่คือหมายถึงการเป็นรายการที่จะกองมากเกินของ C ++ คำถามที่พบบ่อย . ถ้าคุณต้องการที่จะวิจารณ์ความคิดของการให้คำถามที่พบบ่อยในรูปแบบนี้แล้วโพสต์บนเมตาที่เริ่มต้นทั้งหมดนี้ . จะเป็นสถานที่ที่จะทำเช่นนั้นได้คำตอบ คำถามนั้นได้รับการตรวจสอบในห้องสนทนา C ++ซึ่งแนวคิด FAQ เริ่มต้นตั้งแต่แรกดังนั้นคำตอบของคุณมีโอกาสมากที่จะได้รับการอ่านโดยผู้ที่คิดแนวคิดนี้)
543 c++  c++11  iterator  c++17  c++-faq 


7
วิธีแปลง iterator เป็นสตรีม
ฉันกำลังมองหาวิธีที่กระชับในการแปลงIteratorเป็นStreamหรือมากกว่าโดยเฉพาะเพื่อ "ดู" ตัววนซ้ำเป็นสตรีม เพื่อเหตุผลด้านประสิทธิภาพฉันต้องการหลีกเลี่ยงสำเนาตัววนซ้ำในรายการใหม่: Iterator<String> sourceIterator = Arrays.asList("A", "B", "C").iterator(); Collection<String> copyList = new ArrayList<String>(); sourceIterator.forEachRemaining(copyList::add); Stream<String> targetStream = copyList.stream(); จากคำแนะนำในความคิดเห็นฉันได้ลองใช้Stream.generate: public static void main(String[] args) throws Exception { Iterator<String> sourceIterator = Arrays.asList("A", "B", "C").iterator(); Stream<String> targetStream = Stream.generate(sourceIterator::next); targetStream.forEach(System.out::println); } อย่างไรก็ตามฉันได้รับNoSuchElementException(เนื่องจากไม่มีการร้องขอhasNext) Exception in thread "main" java.util.NoSuchElementException at java.util.AbstractList$Itr.next(AbstractList.java:364) at …
468 java  iterator  java-8 

12
iterator, iterable และ iteration คืออะไรกันแน่?
คำจำกัดความพื้นฐานที่สุดของ "iterable", "iterator" และ "iteration" ใน Python คืออะไร? ฉันได้อ่านคำจำกัดความหลายคำ แต่ฉันไม่สามารถระบุความหมายที่แน่นอนได้เนื่องจากมันยังไม่จม ใครสามารถช่วยฉันด้วยคำจำกัดความ 3 คำในคนธรรมดา?

8
วิธีที่มีประสิทธิภาพมากที่สุดในการรับดัชนีตัววนซ้ำของ std :: vector คืออะไร
ฉันกำลังวนซ้ำเวกเตอร์และต้องการดัชนีที่ตัววนซ้ำกำลังชี้ไปที่ AFAIK สามารถทำได้สองวิธี: it - vec.begin() std::distance(vec.begin(), it) อะไรคือข้อดีข้อเสียของวิธีการเหล่านี้?

11
การเรียงลำดับเวกเตอร์ตามลำดับจากมากไปน้อย
ฉันควรใช้ std::sort(numbers.begin(), numbers.end(), std::greater<int>()); หรือ std::sort(numbers.rbegin(), numbers.rend()); // note: reverse iterators จะจัดเรียงเวกเตอร์ตามลำดับจากมากไปน้อยเป็นอย่างไร มีประโยชน์หรือข้อเสียเปรียบกับวิธีใดวิธีหนึ่งหรือไม่?
310 c++  sorting  stl  vector  iterator 

8
วิธีการใช้ตัววนซ้ำแบบ STL และหลีกเลี่ยงข้อผิดพลาดทั่วไป?
ฉันสร้างคอลเล็กชันที่ฉันต้องการให้ตัววนซ้ำ STL เข้าถึงแบบสุ่ม ฉันค้นหาตัวอย่างการใช้ตัววนซ้ำ แต่ฉันไม่พบสิ่งใด ฉันรู้เกี่ยวกับความจำเป็นในการโอเวอร์โหลด[]และ*ตัวดำเนินการ ข้อกำหนดสำหรับตัววนซ้ำเป็น "ลักษณะ STL" และข้อผิดพลาดอื่น ๆ ที่ควรหลีกเลี่ยง (ถ้ามี) คืออะไร บริบทเพิ่มเติม: นี่สำหรับห้องสมุดและฉันไม่ต้องการแนะนำการพึ่งพาใด ๆ เว้นแต่ว่าฉันต้องการ ฉันเขียนคอลเลกชันของตัวเองเพื่อให้สามารถใช้งานร่วมกันได้ของไบนารีระหว่าง C ++ 03 และ C ++ 11 ด้วยคอมไพเลอร์เดียวกัน (ดังนั้น STL ที่ไม่น่าจะทำลาย)

13
รับไอเท็มแรกจาก iterable ที่ตรงกับเงื่อนไข
ฉันต้องการรับไอเท็มแรกจากรายการที่ตรงกับเงื่อนไข เป็นสิ่งสำคัญที่วิธีการที่เกิดขึ้นจะไม่ประมวลผลรายการทั้งหมดซึ่งอาจมีขนาดค่อนข้างใหญ่ ตัวอย่างเช่นฟังก์ชั่นต่อไปนี้เพียงพอ: def first(the_iterable, condition = lambda x: True): for i in the_iterable: if condition(i): return i ฟังก์ชั่นนี้สามารถใช้งานได้ดังนี้: >>> first(range(10)) 0 >>> first(range(10), lambda i: i > 3) 4 อย่างไรก็ตามฉันไม่สามารถคิดถึงการใช้งานในตัว / ซับในที่ดีเพื่อให้ฉันทำสิ่งนี้ได้ ฉันไม่ต้องการคัดลอกฟังก์ชั่นนี้โดยเฉพาะถ้าไม่จำเป็น มีวิธีการรับไอเท็มแรกที่ตรงกับเงื่อนไขหรือไม่?
303 python  iterator 

12
แปลง Iterator เป็น ArrayList
รับIterator<Element>แล้วเราจะแปลงIteratorให้เป็นArrayList<Element>(หรือList<Element> ) ในที่ดีที่สุดและเร็วที่สุดในทางที่เป็นไปเพื่อให้เราสามารถใช้ArrayList'การดำเนินงานเกี่ยวกับมันเช่นget(index), add(element)ฯลฯ
241 java  list  arraylist  iterator 

6
วิธีการใช้ตัววนซ้ำที่กำหนดเองและ const_iterators อย่างถูกต้องได้อย่างไร
ฉันมีคลาสคอนเทนเนอร์แบบกำหนดเองซึ่งฉันต้องการเขียนiteratorและconst_iteratorคลาส ฉันไม่เคยทำสิ่งนี้มาก่อนและไม่พบวิธีการที่เหมาะสม แนวทางในการสร้างตัววนซ้ำคืออะไรและฉันควรระวังอะไรบ้าง ฉันต้องการหลีกเลี่ยงการทำซ้ำรหัส (ฉันรู้สึกว่าconst_iteratorและiteratorแบ่งปันหลายสิ่งหนึ่งควร subclass อื่น ๆ ) ข้อควรทราบ: ฉันค่อนข้างมั่นใจว่า Boost มีบางอย่างในการทำให้ง่ายขึ้น แต่ฉันไม่สามารถใช้ที่นี่ได้ด้วยเหตุผลโง่ ๆ หลายประการ

27
ทำไมต้องใช้ตัววนซ้ำแทนดัชนีอาร์เรย์
รับโค้ดสองบรรทัดต่อไปนี้: for (int i = 0; i < some_vector.size(); i++) { //do stuff } และนี่: for (some_iterator = some_vector.begin(); some_iterator != some_vector.end(); some_iterator++) { //do stuff } ฉันบอกว่าวิธีที่สองเป็นที่ต้องการ ทำไมถึงเป็นอย่างนี้

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