728x90
728x90
STL에는 동적 배열용 std::vector가 있다. std::vector를 사용하면 배열을 사용한 것처럼 크기와 랜덤 액세스에 관계없이 요소를 삽입하거나 삭제할 수 있다.
이러한 std::vector와 같은 동적 배열을 생성하려면 메모리를 할당하고 요소 추가로 인해 메모리 크기가 충분하지 않을 경우 재할당해야 한다.
*len , push_back 및 pop_back 구현*
#include <iostream>
using namespace std;
template <typename T>
struct dynamic_array {
T* pointer = nullptr;
size_t cap = 0;
public:
dynamic_array(size_t cap)
: cap(cap) {
this->pointer = new T[cap];
}
int array_real_size = 0;
void push_front(const T& element) {
// TODO: push_front
// if array is [2,3] and pop_front(1) called
// then array should be [1,2,3]
if(array_real_size == 0)
{
pointer[0] = element;
array_real_size++;
}
else
{
array_real_size++;
int* temp_array = new int[array_real_size+1];
for(int i=0; i<array_real_size; i++)
{
temp_array[i+1] = pointer[i];
}
temp_array[0] = element;
for(int i=0; i<array_real_size; i++)
{
pointer[i] = temp_array[i];
}
delete[] temp_array;
}
}
void push_back(const T& element) {
// TODO: push_back
// if array is [1,2] and pop_front(3) called
// then array should be [1,2,3]
if(array_real_size == 0)
{
push_front(element);
}
else
{
pointer[array_real_size] = element;
array_real_size++;
}
}
T pop_front() {
// TODO: pop front
// if array is [1,2,3], and pop_front called
// then array should be [2,3] and return 1
if(array_real_size == 0)
{
cout << "array is empty . so return value is ";
return 0;
}
int return_value = pointer[0];
int* temp_array = new int[array_real_size+1];
for(int i = 0; i< array_real_size; i++)
{
temp_array[i] = pointer[i+1];
}
for(int i = 0; i< array_real_size; i++)
{
pointer[i] = temp_array[i];
}
array_real_size -= 1;
pointer[array_real_size] = 0;
delete[] temp_array;
return return_value;
}
T pop_back() {
// TODO: pop back
// if array is [1,2,3], and pop_front called
// then array should be [1,2] and return 3
if(array_real_size== 0)
{
cout << "array is empty . so return value is " ;
return 0;
}
array_real_size -= 1;
int return_value = pointer[array_real_size];
pointer[array_real_size] = 0;
return return_value;
}
~dynamic_array() {
delete[] this->pointer;
}
};
int main() {
auto v = dynamic_array<int>(10);
return 0;
}
728x90
728x90
'Language > C++' 카테고리의 다른 글
[C++] 이중 연결 리스트 (Double Linked List) - 컴도리돌이 (0) | 2020.10.28 |
---|---|
[C++] 연결리스트 (list.h , node.h , CMakeLists.txt)-컴도리돌이 (0) | 2020.10.27 |
[C++] Reference(&) - 컴도리돌이 (0) | 2020.10.18 |
[C++] Namespace - 컴도리돌이 (0) | 2020.10.17 |
[C++] 동적할당(Dynamic memory allocation) - 컴도리돌이 (0) | 2020.10.17 |