본문 바로가기

코딩 및 기타/어서와! 자료구조와 알고리즘

4일차

728x90

동적 배열과 std::vector

∙ 동적 메모리 할당(dynamic memory allocation)

- 프로그램 실행 중 필요한 크기의 메모리 공간을 할당하여 사용하는 기법

- 동적으로 할당한 메모리는 사용이 끝나면 명시적으로 (할당된) 메모리를 해제해야 한다.

- C언어 : malloc() 또는 calloc() 함수로 메모리 할당하고, free() 함수로 메모리 해제

- C++언어 : new 연산자로 메모리 할당하고, delete 연산자로 메모리 해제

 

∙ 동적 메모리 할당을 이용한 동적 배열 생성 및 해제

- new [] 연산자를 이용하여 동적 배열을 위한 메모리를 할당하고, delete [] 연산자를 이용하여 동적 배열 메모리를 해제

- 동적 메모리 할당은 힙 메모리 영역을 사용하므로 대용량 배열도 할당 가능

// 동적 메모리 할당 예시 코드
#include <iostream>

using namespace std;

int main()
{
    int* ptr = new int[3];
    ptr[0] = 10;
    ptr[1] = 20;

    for (int i = 0; i < 3; i++){
        cout << ptr[i] << endl;
    }

    delete [] ptr;
    ptr = nullptr;

}

 

∙ std::vector란?

- C++에서 C스타일 배열을 대처하는 가변 크기 컨테이너

> 초기화 과정에 데이터의 크기를 지정하지 않아도 됨

> 배열의 크기를 확장할 수 있음

- 원소의 타입을 매개변수로 사용하는 클래스 템플릿

- <vector>에 정의되어 있음

 

//vector 예시 코드
#include <iostream>
#include <vector>

using namespace std;

int main()
{
    vector<int> v1; 
    v1.push_back(10); //v1[0]
    v1.push_back(20); //v1[1]
    v1.push_back(30); //v1[2]  

    vector<int> v2(10); //v2[0] ~ v2[9]

    vector<int> v3 {10, 20, 30, 40, 50};

    vector<int> v4 = v3;
    
}

 

- 2차원 벡터 생성과 원소 참조

#include <iostream>
#include <vector>

using namespace std;

int main()
{
    //2행 3열 
    vector<vector<int> > mat1(2, vector<int>(3));

    vector<vector<int> > mat2 {
        {1, 2, 3},
        {4, 5, 6}
    };

    for (int r = 0 ; r < mat2.size(); r++){
        for(int c = 0; c < mat2[r].size(); c++){
            cout << mat2[r][c] << ", ";
        }
        cout << endl;
    }

}

 

∙ std::vector 주요 멤버 함수와 기능 

멤버 함수 설명
operator [] 특정 위치 원소의 참조를 반환
front() 첫 번째 원소의 참조를 반환
back() 마지막 원소의 참조를 반환
push_back() push_back()과 같지만 객체의 복제나 이동이 없어서 효율적
pop_back() 마지막 원소를 삭제 (마지막 원소를 반환하지 않음)
insert() 특정 위치에 원소를 삽입
erase() 특정 위치의 원소를 삭제
clear() 모든 원소를 삭제
size() 원소의 개수를 반환
empty() 벡터가 비어 있으면 true를 반환

'코딩 및 기타 > 어서와! 자료구조와 알고리즘' 카테고리의 다른 글

6일차  (0) 2023.08.10
5일차  (0) 2023.08.09
3일차  (0) 2023.08.07
2일차  (0) 2023.08.04
1일차  (0) 2023.08.03