Neden Standart yineleyici aralığı [begin, end) yerine [başlangıç, bitiş]?
Neden Standart fiili sonunda sonunun, yerine bir end()
tanımlar?
CEVAP
En iyi argüman kolayca Dijkstra himself tarafından yapılmış
Aralığın boyutunu basit bir fark olmak istiyorumsonunda&eksi;başlar;
alt sınır daha da dahil olmak üzere "" zaman dizileri boş olanlar için yozlaşmış ve de alternatif (çünkü . doğal ^em>hariçalt sınır) "---başlamadan önce" değer sentinel. bir varlığını gerektirir
Hala yerine sıfırdan saymaya başlamadan önce neden haklı gerekir, ama bu sorunun bir parçası değildi.
[Begin, end) sözleşme hikmetini birden fazla iç içe geçmiş ya da yineledi calles ile uğraşan bir algoritma herhangi bir zaman ve tekrar menzil tabanlı amorti doğal zinciri olan yapılar,. Buna karşılık, iki kat kapalı bir aralığı kullanarak off-olanlar ve son derece rahatsız edici ve gürültülü kodu doğuracaktır. Örneğin, bir bölüm düşünün [nend - begin
kere çalışır for (it = begin; it != end; it)
,. Gelen kodu ise iki ucu da dahil-olsaydı çok daha okunabilir olurdu; ve boş aralıkları ne kadar iyi idare ettiğinizi düşünün.
Son olarak da saymaya sıfırdan başlamalı neden güzel bir tartışma yapabiliriz: biz sadece kurulan, bir dizi verilir . aralıklar için yarı açık sözleşme İle ^em>Neleman (ki bir dizi üyeleri numaralandır), 0 doğal "aralığı [0, olarak yazabilirsiniz" başlıyor ^em>N), herhangi bir garip uzaklıklar ve düzeltme olmadan.
Özetle: her yerde aralığı tabanlı 1
algoritmalar numarasını doğrudan bir sonucudur, ve motivasyon için görmüyoruz, [begin, end) Kongre aslında.
Neden Standart tarayıcı sanal makine d...
Neden range(başlangıç, bitiş) uç içerm...
Neden nesne yerine bir işaretçi kendis...
Neden Standart girdiden okuma satır Py...
Python katılın, neden dize.liste yerin...