Merhaba,
Zafer'in başlattığı ve bir süre önce C++'daki olanağı görünce devam ettirdiğim basit bir yığıt yapısının son halini yayınlıyorum. Bilmiyorum, D'de aynı özelliklerde bir olanak var mı? Ama yoksa da koysalar ne iyi olurdu...:)
Çünkü birebir C++'daki ile aynı şekilde çalıştığı gibi (bunu çözdüğüm 5 örnekten ve referans verdiğim adreslerden anlayabilirsiniz) aralıklarla da çalışıyor. Üstelik ikinci bir bonus olarak 'clear()' üye işlevini ekledim. Böylece 5 üye işlev aralık olanağı ile birlikte 8 üye işleve çıktı. Bilmiyorum başka şeye ihtiyaç var mı?
struct Stack(T) {
private int konum;
private T[] stack;
public:
void push(T)(T veri) @property
{
stack ~= veri;
konum++;
}
T pop() @property
{
return stack[--konum];
}
ref T top() @property
{
return stack[konum - 1];
}
/*** BONUS ***/
void clear() @property
{
stack = stack.init;
if(stack.length) {
throw new Exception("Stack is not empty!");
} else konum = 0;
}
void popFront() @property
{
--konum;
}
T front() const @property
{
return stack[konum - 1];
}
/*** BONUS ***/
bool empty() const @property
{
return konum == 0;
}
int size() @property
{
return konum;
}
}
import std.stdio;
void main() {
Stack!int mystack;
int sum;
foreach(i; 0..11) mystack.push(i);
while (!mystack.empty()) {
sum += mystack.top();
mystack.pop();
}
sum.writeln(" Sum of the numbers...");
// example #1: http://www.cplusplus.com/reference/stl/stack/empty/
foreach(i; 0..5) mystack.push(i);
write("Popping out elements...");
while (!mystack.empty()) {
mystack.top().write(" ");
mystack.pop();
}
writeln();
/* example #2: http://www.cplusplus.com/reference/stl/stack/pop/
* example #3: http://www.cplusplus.com/reference/stl/stack/push/
*/
"0. size: ".writeln(mystack.size());
foreach(i; 0..5) mystack.push(i);
"1. size: ".writeln(mystack.size());
mystack.pop();
"2. size: ".writeln(mystack.size());
// example #4: http://www.cplusplus.com/reference/stl/stack/size/
mystack.clear(); // BONUS...:)
mystack.push(10);
mystack.push(20);
mystack.top() -= 5 ;
"mystack.top() is now ".writeln(mystack.top);
// example #5: http://www.cplusplus.com/reference/stl/stack/top/
foreach(range; mystack) range.writeln(); // BONUS...:)
writeln("-THE END-");
}
--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]