Level : WORDPRESS BOOK LINKEDIN PATENT Send Mail 동냥하기 hajunho.com

동적템플릿

C++ / / 2019. 3. 26. 23:17
반응형

동적 배열 템플릿 클래스는 일반적으로 크기가 가변적인 배열을 관리하는 클래스를 의미하며, 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 클래스는 기본적으로 배열의 크기를 관리하고, 요소를 추가하거나 제거할 수 있는 기능을 제공합니다.

주요 기능:

  1. 생성자 및 소멸자: 클래스 생성 시 배열을 초기화하고, 소멸 시 메모리를 해제합니다.
  2. push_back: 배열의 끝에 요소를 추가하며, 배열이 꽉 찼을 경우 크기를 두 배로 증가시켜 재할당합니다.
  3. pop_back: 배열의 끝에서 요소를 제거합니다.
  4. 연산자 오버로딩: [] 연산자를 오버로딩하여 배열 요소에 쉽게 접근할 수 있게 합니다.
  5. 크기 및 용량 관리: 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
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기