Evet Salih, bahsettiğim tam olarak o şekildeydi. :)
--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]
July 11, 2012 Şablonlar ile yığın sınıfı | ||||
---|---|---|---|---|
| ||||
Posted in reply to zafer | Evet Salih, bahsettiğim tam olarak o şekildeydi. :) -- |
July 10, 2012 Şablonlar ile yığın sınıfı | ||||
---|---|---|---|---|
| ||||
Posted in reply to Salih Dinçer | Bence güzel. front()'lar ref döndürmedikleri için içerideki elemanların değiştirilmelerine de izin vermiyorlar. ~this() içindeki işlemlere hiç gerek olmasa da şu ikisi de derleniyor:
Ali -- |
August 01, 2012 Şablonlar ile yığın sınıfı | ||||
---|---|---|---|---|
| ||||
Posted in reply to Ali Çehreli (acehreli) | Şimdi ilgili dersi işlerken, Zafer'in başlattığı bu başlıktan çok faydalandım, teşekkürler Zafer. Bir kaç ekleme yapmak ve soru sormak istiyorum... Ben opApply içindeki if kontolünden kurtulmak için kodu şöyle düzenlemeye çalıştım. Birde siz bakın nasıl olmuş, bir eksik veya hata var mı? Ne dersiniz ?
class Yığın (T){ this (size_t kapasite) { public: T fetch() { void rewind() { bool empty() { //* code-toggle-on/off T front() const {
import std.stdio; void main() {
}//*/ //harf.rewind(); // Bu olmazsa sonraki döngü baştan başlamaz! foreach(c; harf) c.write(" ");
|
August 01, 2012 Şablonlar ile yığın sınıfı | ||||
---|---|---|---|---|
| ||||
Posted in reply to Ali Çehreli (acehreli) | Ali hocam anlayamıyorum...:) Doğru gitmeyen bir şeyler var. Bunu aynı yapı üzerinden işlemeye devam edelim mi? Alıntı (acehreli): >
import std.stdio; void main(){ foreach(sayı; dizi) { writeln; dizi.opApply(
|
August 01, 2012 Şablonlar ile yığın sınıfı | ||||
---|---|---|---|---|
| ||||
Posted in reply to Salih Dinçer | Tamam, sorun kalmadı çünkü yukarıda verdiğim cevaba rağmen sorunu görememişim! Biz 0'a takılmaktayız ve koşul ifadesi (sayı % kesme == 0) şeklinde olacak. Ben de 'break''i yakalayamadığımız yönünde şiddetli bir azap çekmek üzereydim...:)
Yukarıdaki kodlar çalışıyor çünkü aralığı 1-30 arasında kurdum. O yüzden 10'a bölümde kesme (kırılma) olmakta. Teşekkürler, faydalı bir muhabbet oldu... -- |
August 01, 2012 Şablonlar ile yığın sınıfı | ||||
---|---|---|---|---|
| ||||
Posted in reply to Ali Çehreli (acehreli) | Alıntı (acehreli): >Talihsiz bir isim olmuş ama sonundaki "me" olumsuzluk anlamında değil herhalde. Benim koşulumu neden beğenmedin? Hayır beğenmemekten çok, farklı bir çıktı alamadığımı ve doğru çalışmadığını fark ettim. Meğerse 2'ye kalansız bölünebilen bir sayıda break yapmak istemişsin. Ben ise daha çok anlayabilmek için bu sihirli sayıyı değiştirip 3, 4, 5 yapmak istedim ve farklı bir sonla karşılaşmadım. Ama aralığı 0'dan değil de 1'den başlatınca ve ifadeyi değiştirince farklı aralıklarda break yapılabildiğini hemen sonraki iletide (herhalde bu ikinci iletimi görmedin?) gösterdim. Sanki bu haliye daha güzel, en azından benim için...:) Beğenmediğin kesme sabiti ise o an aklıma gelen, xSay, kSay, ySay da olabilecek herhangi bir şey olabilir. Çünkü her iki opApply uygulamasındaki ifadeleri değiştirmem gerekiyordu. Yoksa opApply içinde görünüp görünmemesi ile ilgilenmiyorum. O bana özel bir kolaylıktı, belki de paylaşmamalıydım...:) -- |
August 01, 2012 Şablonlar ile yığın sınıfı | ||||
---|---|---|---|---|
| ||||
Posted in reply to Ali Çehreli (acehreli) | Alıntı (acehreli): >Alıntı (acehreli): >dizi.opApply() açılımın yaparken opApply()'a gönderilen temsilcinin kullanıcının ortamına erişemediğini söylemek aklıma bile gelmemiş. O söylediğim yanlış. Tabii ki kullanıcının temsilcisi kullanıcının ortamına erişebilir.
-- |
August 01, 2012 Şablonlar ile yığın sınıfı | ||||
---|---|---|---|---|
| ||||
Posted in reply to Salih Dinçer | Alıntı (Salih Dinçer): >bahsedilen break anı hangi döngü tarafından yapılıyor? Eğer dışarıdaki foreach döngüsü bir 'break' ile kırılmışsa islemler() sıfırdan farklı bir değer döndürür. O değere bakmalıyız ve sıfırdan farklı olduğu zaman opApply() içindeki döngüyü de kırmalıyız. Daha kolay görülsün diye daha da küçük bir yapı tanımladım. main()'deki kullanıcı kodları foreach'i erkenden kırmak istiyor (görülen ilk tek sayıda 'break' ile çıkıyor):
Çıktıdan anlaşıldığına göre döngü kırılmamış: '0 Bunun nedeni, derleyicinin main()'deki döngüyü tam olarak şuna dönüştürmesidir:
(O kodu main()'deki bütün foreach'in yerine yazabilirsiniz. Çıktı aynı olacak.) Görüldüğü gibi, derleyici "kullanıcı break ile çıkmak istiyor" bilgisini, temsilciden sıfırdan farklı bir değer döndürerek veriyor. İşte opApply() içindeki döngüdeyken o değere bakmamız gerekir. Asıl kodu şöyle değiştiriyorum:
(Not: break_mi'nin türü aslında int olsa da bir bool değişken gibi adlandırdım. dönüşDeğeri vs. de olabilirdi.) Artık döngü ilk tek sayıda kırılır: '0 Alıntı: >rewind() işlevinin neden lazım olabileceğini gösteriyor. İşte o daha önce konuştuğumuz topluluk-aralık karşılaştırmasına bağlı. Aralık işlevleri doğrudan topluluk üzerinde olursa topluluktan istemeden eleman çıkartılır. Basit bir writeln() çağrısı bile topluluğu boşaltabiliyor. O yüzden her topluluk elemanları üzerinde ilerlemeyi sağlayan bir aralık türü sunmalı ve ilerlendikçe bu aralık daralmalı; asıl topluluk korunmalı. Bunu dilimlerde görüyoruz; popFront() ile dilim eleman kaybeder ama eriştirdiği elemanlar kendi dizilerinde durmaya devam ederler. Ek olarak, eğer aralığın kendisi daha sonradan kullanılabilmek üzere saklanabiliyorsa o zaman save() işlevini sunar. save() elemanları kopyalamaz, aralığın durumunu saklar. Bütün bunlara rağmen ben daha önceki bir gözlemime döneceğim: Yığın veri yapısı üzerinde eleman kaybetmeden ilerlemek zaten doğal gelmiyor çünkü ilerleme kavramı bütünüyle baştaki elemanı çıkartma kavramı üzerine kurulu. Ama yukarıda da gösterildiği gibi, bu yapının nasıl gerçekleştirildiğini (dilim kullanıyor) bilen bir yan aralık tanımlanabilir ve o aralık bütün elemanlar üzerinde ilerleyebilir. Ne olursa olsun bu bana doğal gelmiyor. Ali -- |
August 01, 2012 Şablonlar ile yığın sınıfı | ||||
---|---|---|---|---|
| ||||
Posted in reply to Salih Dinçer | Alıntı (Salih Dinçer): >Önce bu yapının döndürdüğü aralığı biraz genişlettim. Ayrıca derleyicinin 'foreach()' döngüsünü dönüştürdüğü benzeriyle birlikte çalıştırdım. Ayrıca kesme (immutable) isminde bir sabit değişken tanımladım... Talihsiz bir isim olmuş ama sonundaki "me" olumsuzluk anlamında değil herhalde. Benim koşulumu neden beğenmedin? Bir sayının tek olup olmadığını anlamak için % işleci kullanılır ya... Bizim türümüzden bir nesneyi kendi foreach döngüsünde kullanmak isteyen programcı "tek sayı olduğunda yeter" demek istiyor. Şu değil midir:
İstersek daha açık olarak ((sayı % 2) != 0) da yazabilirdik ama tabii ki '== 0' ters olurdu. Senin kafanı karıştırmış olmalıyım. Aslında çok basit: programcı tek sayı olunca döngüyü kırmak istiyor. Alıntı: >Evet, (sayı%2) koşul ifadesi gerçekten de 2'ye ulaştığında yapı döngüsünde 'return''e sebep oluyor. Ama bu ifadesinin anlamı 2'ye bölünebilen ilk sayı da 0 döndür demek değil mi? Kullanıcının if ifadesine yazdığı koşulun işlem()'in döndürdüğü değerle ilgisi yok. Kural şu:
Alıntı: >
|
August 01, 2012 Şablonlar ile yığın sınıfı | ||||
---|---|---|---|---|
| ||||
Posted in reply to Ali Çehreli (acehreli) | Alıntı (acehreli): >dizi.opApply() açılımın yaparken opApply()'a gönderilen temsilcinin kullanıcının ortamına erişemediğini söylemek aklıma bile gelmemiş. O söylediğim yanlış. Tabii ki kullanıcının temsilcisi kullanıcının ortamına erişebilir. Alıntı: >'kesme' gibi yerel bir değişken orada görülemez. 'kesme' kendisi opApply() içindeyken görülemez ve görülmüyor da zaten. Temsilci içinden ise görülebilir ("ona erişilebilir" anlamında). Ali -- |