#include <iostream>
#include <vector>
#include <cstddef>
class bitArray
{
private:
std::vector<int> sortie;
public:
explicit bitArray(int size): sortie(size) {}
bitArray& operator+=(const std::size_t i)
{
if (0 <= i && i < sortie.size()) // check for (0 <= index < size) of the array
{
this ->sortie[i] = 1;
return *this;
}
else
{
// do your logic;
// for instance, I have done something like follows:
std::cout << "out of bound" << std::endl;
if(sortie.size() == 0) // if the size of array == 0
sortie.resize(1,0);
}
return *this;
}
int operator[] (const std::size_t index)
{
return (0 <= index && index < sortie.size()) ? // check for (0 <= index < size) of the array
sortie[index] : -1;
}
};
int main ()
{
bitArray obj(3);
obj += 2;
std::cout << obj[2] << std::endl;
obj += -2;
std::cout << obj[-2] << std::endl;
obj += 22;
std::cout << obj[22] << std::endl;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgojaW5jbHVkZSA8Y3N0ZGRlZj4KCmNsYXNzIGJpdEFycmF5CnsKcHJpdmF0ZToKICAgc3RkOjp2ZWN0b3I8aW50PiBzb3J0aWU7CnB1YmxpYzoKICAgZXhwbGljaXQgYml0QXJyYXkoaW50IHNpemUpOiBzb3J0aWUoc2l6ZSkge30KICAgYml0QXJyYXkmIG9wZXJhdG9yKz0oY29uc3Qgc3RkOjpzaXplX3QgaSkKICAgewogICAgICBpZiAoMCA8PSBpICYmIGkgPCBzb3J0aWUuc2l6ZSgpKSAvLyBjaGVjayBmb3IgKDAgPD0gaW5kZXggPCBzaXplKSBvZiB0aGUgYXJyYXkKICAgICAgewogICAgICAgICAgICB0aGlzIC0+c29ydGllW2ldID0gMTsKICAgICAgICAgICAgcmV0dXJuICp0aGlzOwogICAgICB9CiAgICAgIGVsc2UKICAgICAgewogICAgICAgICAvLyBkbyB5b3VyIGxvZ2ljOwogICAgICAgICAvLyBmb3IgaW5zdGFuY2UsIEkgaGF2ZSBkb25lIHNvbWV0aGluZyBsaWtlIGZvbGxvd3M6CiAgICAgICAgIHN0ZDo6Y291dCA8PCAib3V0IG9mIGJvdW5kIiA8PCBzdGQ6OmVuZGw7CiAgICAgICAgIGlmKHNvcnRpZS5zaXplKCkgPT0gMCkgLy8gaWYgdGhlIHNpemUgb2YgYXJyYXkgPT0gMAogICAgICAgICAgICBzb3J0aWUucmVzaXplKDEsMCk7CiAgICAgIH0KICAgICAgcmV0dXJuICp0aGlzOwogICB9CiAgIGludCBvcGVyYXRvcltdIChjb25zdCBzdGQ6OnNpemVfdCBpbmRleCkKICAgewogICAgICByZXR1cm4gKDAgPD0gaW5kZXggJiYgaW5kZXggPCBzb3J0aWUuc2l6ZSgpKSA/ICAvLyBjaGVjayBmb3IgKDAgPD0gaW5kZXggPCBzaXplKSBvZiB0aGUgYXJyYXkKICAgICAgICAgICAgICAgc29ydGllW2luZGV4XSA6IC0xOwogICB9Cn07CmludCBtYWluICgpCnsKICAgYml0QXJyYXkgb2JqKDMpOwogICBvYmogKz0gMjsKICAgc3RkOjpjb3V0IDw8IG9ialsyXSA8PCBzdGQ6OmVuZGw7CgogICBvYmogKz0gLTI7CiAgIHN0ZDo6Y291dCA8PCBvYmpbLTJdIDw8IHN0ZDo6ZW5kbDsKCiAgIG9iaiArPSAyMjsKICAgc3RkOjpjb3V0IDw8IG9ialsyMl0gPDwgc3RkOjplbmRsOwoKICAgcmV0dXJuIDA7Cn0K