#include "iostream"
using namespace std;
template<class T>
class vector {
private:
T* ptr;
int sz;
int capacity;
public:
vector()
{
ptr = new T[1];
sz = 0;
capacity = 1;
}
vector(int s)
{
capacity = s;
sz = 0;
ptr = new T[s];
}
~vector()
{
if (ptr)delete ptr;
}
T operator[](int n)
{
if (n >= sz) {
cout << "Khong ton tai" << endl;
}
else
{
return ptr[n];
}
}
int size()
{
return sz;
}
int getCapacity()
{
return capacity;
}
void reserve() // tự động thêm dung lượng
{
int newalloc = this->capacity * 2;
this->capacity = newalloc;
T* temp = new T[newalloc];
for (int i = 0; i < this->sz; i++)
{
temp[i] = this->ptr[i];
}
if (this->ptr) { delete[] this->ptr; }
this->ptr = temp;
}
void push_back(T elem)
{
if (sz == capacity)
{
reserve();
this->ptr[sz] = elem;
sz = sz + 1;
}
else
{
this->ptr[sz] = elem;
sz = sz + 1;
}
}
T pop_back()
{
T temp = this->ptr[sz-1];
this->ptr[sz-1] = 0;
sz = sz - 1;
return temp;
}
void print()
{
//cout << "Capacity: " << capacity << endl;
for (int i = 0; i < sz; i++)
{
cout << ptr[i] << " ";
}
cout << endl;
}
// other methods
};
int main()
{
vector<int> a;
a.push_back(1);
a.push_back(2);
a.push_back(3);
a.push_back(4);
a.push_back(5);
a.push_back(6);
int temp1 = a.pop_back();
int temp2 = a.pop_back();
cout << "Poped items: " << temp1 << " " << temp2 << endl;
cout << "Items in vector: "; a.print();\
cout << "Take out a value in vector: "<< a[0] << endl;
cout << "Take out a value in vector: "<< a[10];
}
I2luY2x1ZGUgImlvc3RyZWFtIgp1c2luZyBuYW1lc3BhY2Ugc3RkOwp0ZW1wbGF0ZTxjbGFzcyBUPgpjbGFzcyB2ZWN0b3Igewpwcml2YXRlOgoJVCogcHRyOwoJaW50IHN6OwoJaW50IGNhcGFjaXR5OwpwdWJsaWM6Cgl2ZWN0b3IoKQoJewoJCXB0ciA9IG5ldyBUWzFdOwoJCXN6ID0gMDsKCQljYXBhY2l0eSA9IDE7Cgl9Cgl2ZWN0b3IoaW50IHMpCgl7CgkJY2FwYWNpdHkgPSBzOwoJCXN6ID0gMDsKCQlwdHIgPSBuZXcgVFtzXTsKCX0KCgl+dmVjdG9yKCkKCXsKCQlpZiAocHRyKWRlbGV0ZSBwdHI7Cgl9CglUIG9wZXJhdG9yW10oaW50IG4pCgl7CgkJaWYgKG4gPj0gc3opIHsKCQkJY291dCA8PCAiS2hvbmcgdG9uIHRhaSIgPDwgZW5kbDsKCQl9CgkJZWxzZQoJCXsKCgkJCXJldHVybiBwdHJbbl07CgkJfQoJfQoJaW50IHNpemUoKQoJewoJCXJldHVybiBzejsKCX0KCWludCBnZXRDYXBhY2l0eSgpCgl7CgkJcmV0dXJuIGNhcGFjaXR5OwoJfQoJdm9pZCByZXNlcnZlKCkgLy8gdOG7sSDEkeG7mW5nIHRow6ptIGR1bmcgbMaw4bujbmcKCXsKCQlpbnQgbmV3YWxsb2MgPSB0aGlzLT5jYXBhY2l0eSAqIDI7CgkJdGhpcy0+Y2FwYWNpdHkgPSBuZXdhbGxvYzsKCQlUKiB0ZW1wID0gbmV3IFRbbmV3YWxsb2NdOwoJCWZvciAoaW50IGkgPSAwOyBpIDwgdGhpcy0+c3o7IGkrKykKCQl7CgkJCXRlbXBbaV0gPSB0aGlzLT5wdHJbaV07CgkJfQoJCWlmICh0aGlzLT5wdHIpIHsgZGVsZXRlW10gIHRoaXMtPnB0cjsgfQoJCXRoaXMtPnB0ciA9IHRlbXA7Cgl9Cgl2b2lkIHB1c2hfYmFjayhUIGVsZW0pCgl7CgkJaWYgKHN6ID09IGNhcGFjaXR5KQoJCXsKCQkJcmVzZXJ2ZSgpOwoJCQl0aGlzLT5wdHJbc3pdID0gZWxlbTsKCQkJc3ogPSBzeiArIDE7CgkJfQoJCWVsc2UKCQl7CgkJCXRoaXMtPnB0cltzel0gPSBlbGVtOwoJCQlzeiA9IHN6ICsgMTsKCQl9Cgl9CglUIHBvcF9iYWNrKCkKCXsKCQlUIHRlbXAgPSB0aGlzLT5wdHJbc3otMV07CgkJdGhpcy0+cHRyW3N6LTFdID0gMDsKCQlzeiA9IHN6IC0gMTsKCQlyZXR1cm4gdGVtcDsKCgl9Cgl2b2lkIHByaW50KCkKCXsKCQkvL2NvdXQgPDwgIkNhcGFjaXR5OiAiIDw8IGNhcGFjaXR5IDw8IGVuZGw7CgkJZm9yIChpbnQgaSA9IDA7IGkgPCBzejsgaSsrKQoJCXsKCQkJY291dCA8PCBwdHJbaV0gPDwgIiAiOwoJCX0KCQljb3V0IDw8IGVuZGw7Cgl9CgkvLyBvdGhlciBtZXRob2RzCn07CmludCBtYWluKCkKewoJdmVjdG9yPGludD4gYTsKCWEucHVzaF9iYWNrKDEpOwoJYS5wdXNoX2JhY2soMik7CglhLnB1c2hfYmFjaygzKTsKCWEucHVzaF9iYWNrKDQpOwoJYS5wdXNoX2JhY2soNSk7CglhLnB1c2hfYmFjayg2KTsKCWludCB0ZW1wMSA9IGEucG9wX2JhY2soKTsKCWludCB0ZW1wMiA9IGEucG9wX2JhY2soKTsKCWNvdXQgPDwgIlBvcGVkIGl0ZW1zOiAiIDw8IHRlbXAxIDw8ICIgIiA8PCB0ZW1wMiA8PCBlbmRsOwoJY291dCA8PCAiSXRlbXMgaW4gdmVjdG9yOiAiOyBhLnByaW50KCk7XAoJY291dCA8PCAiVGFrZSBvdXQgYSB2YWx1ZSBpbiB2ZWN0b3I6ICI8PCBhWzBdIDw8IGVuZGw7Cgljb3V0IDw8ICJUYWtlIG91dCBhIHZhbHVlIGluIHZlY3RvcjogIjw8IGFbMTBdOwp9