using System;
using System.Collections.Generic;
public class Assemble<T>:IEnumerable<T>
{
protected T[] m_list;
protected int m_count=0;
protected int m_capacity=100;
public int Length
{
get
{
return m_count;
}
}
public int Capacity
{
get
{
return m_list.Length;
}
}
public T this[int index]
{
get
{
return m_list[index];
}
set
{
m_list[index]=value;
}
}
public Assemble()
{
m_list=new T[m_capacity];
}
public Assemble(int iCapacity)
{
m_capacity=iCapacity;
m_list=new T[m_capacity];
}
public void Add(T tp)
{
if(m_count<m_list.Length)
m_list[m_count++]=tp;
}
public void Remove(T tp)
{
int index=this.Find(tp);
if(index==-1)
return;
this.RemoveAt(index);
}
public void RemoveAt(int index)
{
for(int i=index;i<m_count-1;i++)
{
m_list[i]=m_list[i]+1;
}
m[--m_count]=default(T);
}
public int Find(T tp)
{
for(int i=0;i<m_count;i++)
if(m_list[i].Equals(tp))
return i;
return -1;
}
public IEnumerable<T> SpecialEnumerator(int iStart,int iEnd,int iPace,bool bReverse)
{
if(!bReverse)
{
for(int i=iStart;i<=iEnd,i+=iPace)
yield return m_list[i];
}
else
{
for(int i=iEnd;i<=iStart,i-=iPace)
yield return m_list[i];
}
}
public IEnumerator<T> GetEnumerator()
{
return SpecialEnumnerator(0,m_count-1,1,false).GetEnumerator();
}
public IEnumerable<T> ReverseEnumerator()
{
return SpecialEnumerator(0,m_count-1,1,true);
}
public IEnumerable<T> RangeEnumerator(int iStart,int iEnd,int iPace,bool bReverse)
{
return SpecialEnumerator(iStart,iEnd,iPace,bReverse);
}
}
class p14_2
{
public static void Main()
{
Assemble<int> iAsm=new Assemble<int>(10);
for(int i=1;i<=10;i++)
iAsm.Add(i);
foreach(int x in iAsm)
{
foreach(int y in iAsm)
{
Console.Writeline({0,3},x*y);
}
Console.WriteLine();
}
}
}