반응형
동적 배열 템플릿 클래스는 일반적으로 크기가 가변적인 배열을 관리하는 클래스를 의미하며, C++의 템플릿을 사용하여 배열이 저장할 수 있는 데이터 타입을 일반화합니다. 동적 배열은 고정된 크기의 배열과 달리, 런타임에 크기를 조절할 수 있다는 장점이 있습니다. 이에 따라 사용자 정의 타입의 객체들도 동적 배열로 관리할 수 있습니다.
아래는 C++에서 동적 배열 템플릿 클래스를 구현하는 예제입니다:
#include <iostream>
#include <stdexcept>
template <typename T>
class DynamicArray {
private:
T* data; // 자료를 저장할 포인터
size_t capacity; // 현재 할당된 용량 (배열의 크기)
size_t size; // 요소의 수
void resize(size_t new_capacity) {
T* new_data = new T[new_capacity];
for (size_t i = 0; i < size; i++) {
new_data[i] = std::move(data[i]);
}
delete[] data;
data = new_data;
capacity = new_capacity;
}
public:
DynamicArray(size_t init_capacity = 10)
: data(new T[init_capacity]), capacity(init_capacity), size(0) {}
~DynamicArray() {
delete[] data;
}
void push_back(const T& value) {
if (size >= capacity) {
resize(capacity * 2);
}
data[size++] = value;
}
void pop_back() {
if (size > 0) {
--size;
} else {
throw std::out_of_range("pop_back() called on empty array");
}
}
T& operator[](size_t index) {
if (index >= size) {
throw std::out_of_range("Index out of range");
}
return data[index];
}
const T& operator[](size_t index) const {
if (index >= size) {
throw std::out_of_range("Index out of range");
}
return data[index];
}
size_t get_size() const {
return size;
}
size_t get_capacity() const {
return capacity;
}
};
int main() {
DynamicArray<int> arr;
arr.push_back(1);
arr.push_back(2);
arr.push_back(3);
for (size_t i = 0; i < arr.get_size(); i++) {
std::cout << arr[i] << " ";
}
std::cout << std::endl;
arr.pop_back();
for (size_t i = 0; i < arr.get_size(); i++) {
std::cout << arr[i] << " ";
}
return 0;
}
이 예제에서 DynamicArray 클래스는 기본적으로 배열의 크기를 관리하고, 요소를 추가하거나 제거할 수 있는 기능을 제공합니다.
주요 기능:
- 생성자 및 소멸자: 클래스 생성 시 배열을 초기화하고, 소멸 시 메모리를 해제합니다.
- push_back: 배열의 끝에 요소를 추가하며, 배열이 꽉 찼을 경우 크기를 두 배로 증가시켜 재할당합니다.
- pop_back: 배열의 끝에서 요소를 제거합니다.
- 연산자 오버로딩: [] 연산자를 오버로딩하여 배열 요소에 쉽게 접근할 수 있게 합니다.
- 크기 및 용량 관리: get_size와 get_capacity 메소드를 제공하여 현재 배열의 크기와 용량을 확인할 수 있습니다.
이런 방식으로 동적 배열 템플릿 클래스를 구현하면 다양한 데이터 타입을 유연하게 처리할 수 있습니다.
반응형
'C++' 카테고리의 다른 글
오후 반차 쓴 유튭 개발자 (2) | 2020.09.14 |
---|---|
스트레스 (0) | 2020.09.12 |
visual studio & visual studio code (0) | 2019.03.13 |
이전... 지금까지 이전한 글은 수정해서 다시 발행할 예정이다. (0) | 2019.02.10 |
브런치 이전 (0) | 2019.02.10 |
최근댓글