정적 배열 (Static Array)
1차원
int arr0[3];
int arr1[10] = { 0, };
int arr2 = { 1,2,3,4 };
int arr0[3][7];
int arr1[10][10] = { { 0, }, };
int arr2 = { { 1,2}, { 3,4 } };
int size = 27;
//동적 배열 생성 1 : new
int* arr1 = new int[size];
//동적 배열 생성 2 : malloc
int* arr2 = (int*)malloc(sizeof(int) * size);
//동적 배열의 초기화
//배열의 초기화 방법 1 : 배열의 전체를 방문하여 0으로 초기화한다.
for (int i = 0; i < size; i++)
{
arr1[i] = 0;
}
//배열의 초기화 방법 2 : memset(cstring 라이브러리)을 사용한다.
memset(arr2, 0, sizeof(int) * size);
동적 배열 class : 2번 방법을 사용한 경우
myArray 클래스
#include <iostream>
#include <cstring>
using namespace std;
template <class T>
class myArray
{
private:
T* m_arr;
int m_size;
int capacity;
public:
myArray<T>();
myArray<T>(int);
myArray<T>(int, T);
void push(T);
void pop();
T at(int);
void set(int, T);
int size();
};
template <class T>
myArray<T>::myArray()
{
this->m_size = 0;
this->capacity = 1;
this->m_arr = new T[this->capacity];
}
template <class T>
myArray<T>::myArray(int size)
{
this->m_size = size;
this->capacity = size;
this->m_arr = new T[size];
}
template <class T>
myArray<T>::myArray(int size, T init)
{
this->m_size = size;
this->m_arr = new T[size];
memset(this->m_arr, init, sizeof(T) * size);
}
template <class T>
void myArray<T>::push(T input)
{
if (this->m_size == this->capacity)
{
this->capacity *= 2;
T* tmp = new T[this->capacity];
memcpy(tmp, this->m_arr, sizeof(T) * m_size);
delete(this->m_arr);
this->m_arr = tmp;
this->m_arr[this->m_size++] = input;
}
else
{
this->m_arr[this->m_size++] = input;
}
}
template <class T>
void myArray<T>::pop()
{
m_size--;
T* tmp = new T[this->m_size];
memcpy(tmp, this->m_arr, sizeof(T) * this->m_size);
delete(this->m_arr);
this->m_arr = tmp;
}
template <class T>
T myArray<T>::at(int idx)
{
return this->m_arr[idx];
}
template <class T>
void myArray<T>::set(int idx, T input)
{
this->m_arr[idx] = input;
}
template <class T>
int myArray<T>::size()
{
return this->m_size;
}
C++에서는 위의 클래스를 최적화시켜 STL을 지원한다.
C++ STL vector
vector<int> arr1;
vector<int> arr2(12);
vector<int> arr3(20, 0);
arr1.push_back(111);
arr1.pop_back();
int val = arr3[10];
arr3.erase(arr3.begin() + 2);