#include <iostream>
#include <string>
#include <cstring> //std::memcpy
class CustomClass
{
private:
std::string a;
std::string b;
public:
CustomClass(std::string a, std::string b): a(a), b(b) {}
std::string to_string()
{
return a + " of " + b;
}
};
class CustomArray
{
private:
CustomClass **arr = nullptr;
size_t capacity = 0;
size_t size = 0;
public:
void resize(size_t new_capacity)
{
CustomClass** resized_arr = new CustomClass*[new_capacity]();
std::memcpy(resized_arr, arr, capacity * sizeof(CustomClass*));
delete[] arr;
capacity = new_capacity;
arr = resized_arr;
}
void add(CustomClass* cc)
{
if (size <= capacity)
this->resize(capacity + 1);
arr[size++] = cc;
}
void print()
{
for (size_t i = 0; i < capacity; i++)
{
if (arr[i] == nullptr)
std::cout << "KEY: " << i << ", VAL: NULL" << std::endl;
else
std::cout << "KEY: " << i << ", VAL: " << arr[i]->to_string() << std::endl;
}
std::cout << std::endl;
}
};
int main()
{
CustomArray arr;
arr.print(); // nothing
CustomClass cc1("1", "3");
arr.add(&cc1);
CustomClass cc2("2", "3");
arr.add(&cc2);
CustomClass cc3("3", "3");
arr.add(&cc3);
arr.print(); // prints 3 elements
arr.resize(5);
arr.print(); //prints 2 nore NULLs
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8c3RyaW5nPgojaW5jbHVkZSA8Y3N0cmluZz4gLy9zdGQ6Om1lbWNweQoKY2xhc3MgQ3VzdG9tQ2xhc3MKewpwcml2YXRlOgoJc3RkOjpzdHJpbmcgYTsKCXN0ZDo6c3RyaW5nIGI7CnB1YmxpYzoKCUN1c3RvbUNsYXNzKHN0ZDo6c3RyaW5nIGEsIHN0ZDo6c3RyaW5nIGIpOiBhKGEpLCBiKGIpIHt9CglzdGQ6OnN0cmluZyB0b19zdHJpbmcoKQoJewoJCXJldHVybiBhICsgIiBvZiAiICsgYjsKCX0KfTsKCmNsYXNzIEN1c3RvbUFycmF5CnsKcHJpdmF0ZToKCglDdXN0b21DbGFzcyAqKmFyciA9IG51bGxwdHI7CglzaXplX3QgY2FwYWNpdHkgPSAwOwoJc2l6ZV90IHNpemUgPSAwOwoKCnB1YmxpYzoKCgl2b2lkIHJlc2l6ZShzaXplX3QgbmV3X2NhcGFjaXR5KSAKCXsKCQlDdXN0b21DbGFzcyoqIHJlc2l6ZWRfYXJyID0gbmV3IEN1c3RvbUNsYXNzKltuZXdfY2FwYWNpdHldKCk7CgkJc3RkOjptZW1jcHkocmVzaXplZF9hcnIsIGFyciwgY2FwYWNpdHkgKiBzaXplb2YoQ3VzdG9tQ2xhc3MqKSk7CgoJCWRlbGV0ZVtdIGFycjsKCgkJY2FwYWNpdHkgPSBuZXdfY2FwYWNpdHk7CgkJYXJyID0gcmVzaXplZF9hcnI7CgoJfQoJdm9pZCBhZGQoQ3VzdG9tQ2xhc3MqIGNjKQoJewoJCWlmIChzaXplIDw9IGNhcGFjaXR5KQoJCQl0aGlzLT5yZXNpemUoY2FwYWNpdHkgKyAxKTsKCgkJYXJyW3NpemUrK10gPSBjYzsKCX0KCgl2b2lkIHByaW50KCkgCgl7CgkJZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjYXBhY2l0eTsgaSsrKSAKCQl7CgkJCWlmIChhcnJbaV0gPT0gbnVsbHB0cikgCgkJCQlzdGQ6OmNvdXQgPDwgIktFWTogIiA8PCBpIDw8ICIsIFZBTDogTlVMTCIgPDwgc3RkOjplbmRsOwoJCQllbHNlCgkJCQlzdGQ6OmNvdXQgPDwgIktFWTogIiA8PCBpIDw8ICIsIFZBTDogIiA8PCBhcnJbaV0tPnRvX3N0cmluZygpIDw8IHN0ZDo6ZW5kbDsKCQl9CgkJCgkJc3RkOjpjb3V0IDw8IHN0ZDo6ZW5kbDsKCX0KfTsKCgoKaW50IG1haW4oKQp7CglDdXN0b21BcnJheSBhcnI7CglhcnIucHJpbnQoKTsgLy8gbm90aGluZwoJCglDdXN0b21DbGFzcyBjYzEoIjEiLCAiMyIpOwoJYXJyLmFkZCgmY2MxKTsKCUN1c3RvbUNsYXNzIGNjMigiMiIsICIzIik7CglhcnIuYWRkKCZjYzIpOwoJQ3VzdG9tQ2xhc3MgY2MzKCIzIiwgIjMiKTsKCWFyci5hZGQoJmNjMyk7CglhcnIucHJpbnQoKTsgLy8gcHJpbnRzIDMgZWxlbWVudHMKCglhcnIucmVzaXplKDUpOwoJYXJyLnByaW50KCk7IC8vcHJpbnRzIDIgbm9yZSBOVUxMcwoKCglyZXR1cm4gMDsKfQ==
KEY: 0, VAL: 1 of 3
KEY: 1, VAL: 2 of 3
KEY: 2, VAL: 3 of 3
KEY: 0, VAL: 1 of 3
KEY: 1, VAL: 2 of 3
KEY: 2, VAL: 3 of 3
KEY: 3, VAL: NULL
KEY: 4, VAL: NULL