int
자료형을 여러개 담을 수 있는 컨테이너
#include <iostream>
class IntArray
{
int* data_ = nullptr;
unsigned length_ = 0;
public:
IntArray(unsigned length = 0)
{
initialize(length);
}
IntArray(const std::initializer_list<int>& list)
{
initialize(list.size());
int count = 0;
for (auto& e : list)
data_[count++] = e;
}
~IntArray()
{
delete[] data_;
}
void initialize(unsigned length)
{
length_ = length;
if (length_ > 0)
data_ = new int[length_];
}
void reset()
{
if (data_)
{
delete[] data_;
data_ = nullptr;
}
length_ = 0;
}
void resize(const unsigned& length)
{
if (length == 0)
reset();
else if (length_ < length)
{
int* new_data_ = new int[length];
for (unsigned i = 0; i < length_; ++i)
new_data_[i] = data_[i];
delete[] data_;
data_ = new_data_;
}
length_ = length;
}
void insertBefore(const int& value, const int& ix)
{
resize(length_ + 1);
for (int i = length_ - 2; i >= ix; --i)
data_[i + 1] = data_[i];
data_[ix] = value;
}
void remove(const int& ix)
{
for (int i = ix; i < length_ - 1; ++i)
data_[i] = data_[i + 1];
--length_;
if (length_ <= 0)
reset();
}
void push_back(const int& value)
{
insertBefore(value, length_);
}
friend std::ostream& operator << (std::ostream& out, const IntArray& arr)
{
for (unsigned i = 0; i < arr.length_; ++i)
out << arr.data_[i] << ' ';
return out;
}
};
int main()
{
using namespace std;
IntArray my_arr{ 1, 3, 5, 7, 9 };
cout << my_arr << endl;
my_arr.insertBefore(10, 1);
cout << my_arr << endl;
my_arr.remove(3);
cout << my_arr << endl;
my_arr.push_back(13);
cout << my_arr << endl;
}
/* stdout
1 3 5 7 9
1 10 3 5 7 9
1 10 3 7 9
1 10 3 7 9 13
*/