SORU
1 NİSAN 2012, Pazar


Neden Standart yineleyici aralığı [begin, end) yerine [başlangıç, bitiş]?

Neden Standart fiili sonunda sonunun, yerine bir end() tanımlar?

CEVAP
1 NİSAN 2012, Pazar


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 [n0,n1)[n1,n2)[n2,n3). Başka bir örnek, standart yineleme döngü end - 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.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • BigBoyTV

    BigBoyTV

    25 EYLÜL 2013
  • Jonnyriddlin1

    Jonnyriddlin

    4 Ocak 2007
  • stewmurray47

    stewmurray47

    1 Kasım 2006