template<class T>
class Buffer
{
unsigned int siz;
T *data;
public:
///constructor(size,filename,openmode)
Buffer(unsigned int s,const char* n, const char* m):siz(s)
{
data= new T[siz];
}
///destructor
~Buffer()
{
delete[] data;
}
///operator[]
T& operator[](unsigned int i)
{
if(i>siz-1)
{
unsigned int newsize=siz*2;
T* tmp=new T[newsize];
for(unsigned int j = 0; j < siz; j++)
{
tmp[j] = data[j];
}
siz=newsize;
delete[] data;
data=tmp;
}
return data[i];
}
};
int main() {
Buffer<char*> s(20,"s.txt","rw"); //20 long char*
for(unsigned int i=0;i<24;i++){ //it overwrites the size of s after default 20
s[i]="hey";
}
}
dGVtcGxhdGU8Y2xhc3MgVD4KY2xhc3MgQnVmZmVyCnsKCiAgICB1bnNpZ25lZCBpbnQgc2l6OwogICAgVCAqZGF0YTsKCgpwdWJsaWM6CgogICAgLy8vY29uc3RydWN0b3Ioc2l6ZSxmaWxlbmFtZSxvcGVubW9kZSkKICAgIEJ1ZmZlcih1bnNpZ25lZCBpbnQgcyxjb25zdCBjaGFyKiBuLCBjb25zdCBjaGFyKiBtKTpzaXoocykKICAgIHsKICAgICAgICBkYXRhPSBuZXcgVFtzaXpdOwogICAgfQoKICAgIC8vL2Rlc3RydWN0b3IKICAgIH5CdWZmZXIoKQogICAgewogICAgICAgIGRlbGV0ZVtdIGRhdGE7CiAgICB9CgogICAgLy8vb3BlcmF0b3JbXQogICAgVCYgb3BlcmF0b3JbXSh1bnNpZ25lZCBpbnQgaSkKICAgIHsKICAgICAgICBpZihpPnNpei0xKQogICAgICAgIHsKICAgICAgICAgICAgdW5zaWduZWQgaW50IG5ld3NpemU9c2l6KjI7CiAgICAgICAgICAgIFQqIHRtcD1uZXcgVFtuZXdzaXplXTsKICAgICAgICAgICAgZm9yKHVuc2lnbmVkIGludCBqID0gMDsgaiA8IHNpejsgaisrKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0bXBbal0gPSBkYXRhW2pdOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHNpej1uZXdzaXplOwogICAgICAgICAgICBkZWxldGVbXSBkYXRhOwogICAgICAgICAgICBkYXRhPXRtcDsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGRhdGFbaV07CiAgICB9Cn07ICAgICAKCmludCBtYWluKCkgewogICAgQnVmZmVyPGNoYXIqPiBzKDIwLCJzLnR4dCIsInJ3Iik7ICAgIC8vMjAgbG9uZyBjaGFyKgogICAgZm9yKHVuc2lnbmVkIGludCBpPTA7aTwyNDtpKyspeyAgIC8vaXQgb3ZlcndyaXRlcyB0aGUgc2l6ZSBvZiBzIGFmdGVyIGRlZmF1bHQgMjAKICAgICAgICBzW2ldPSJoZXkiOwogICAgfQp9