본문 바로가기

삼성전자 알고리즘/자료구조 알고리즘

12. 배열 Array

고정 배열(fixed array) vs 동적 배열 (dynamic array)

출처 : https://boycoding.tistory.com/194

배열의 모든 요소를 0으로 초기화 하는 방법 :

int arr[5] = {};
int brr[5] = {0};

인덱스의 명칭 : enum의 사용

#include <iostream>
using namespace std;
enum StudentNames
{
    Kim,         //0
    Lee,         //1
    Park,        //2
    Choi,        //3
    MAX_STUDENTS //4
};
int main(){
    int scores[MAX_STUDENTS];
    scores[Kim] = 100;    
    cout<<scores[Kim]<<endl;    
    return 0;
}

동적으로 배열 할당 : 런타임 동안에 배열 길이를 선택할 수 있음.

동적으로 배열을 할당하려면 new[] 연산자와 delete[] 연산자를 사용해야 함.

#include <iostream>
using namespace std;
int main(){
    
    int length;
    cin >> length;
    
    int *arr = new int[length];
    
    for(int i=0;i<length;i++){
        arr[i] = 1;
    }
    delete[] arr;
    return 0;
}

주의 : 해제시 delete[] 대신 delete 로 할 시 데이터 손상, 메모리 누수, 충돌 또는 기타 문제와 같은 정의되지 않은 동작이 발생함.

동적 배열 초기화

C++ 11 버전 부터 동적 배열을 0으로 초기화 하는 문법이 생김. ()를 잘 이용하자.

int *arr = new int[length]();

동적 배열은 명시적으로 길이를 설정해 선언해야 한다.

int *arr1 = new int[]{1,2,3};  // X
int *arr2 = new int[3]{1,2,3}; // O

 

1.동적 배열 :

동적할당 : 사용자로부터 이름을 입력 받아 출력받는 프로그램 예)

//동적 메모리 할당
#include <stdio.h>
#include <stdlib.h>
//사용자로부터 이름을 입력 받아 출력하는 프로그램을 생각해보자.
int main() {
	char name[128];	//어플리케이션 버퍼
	printf("input name: ");
	scanf("%s", name);
	//동적 할당 수행
	char *p = malloc(sizeof(char)*(strlen(name) + 1));
							   			//      ^-----ACILL NULL (char의 맨 끝은 \0 이기 때문)
	strcpy(p, name);
	printf("-> %s\n", p);

	free(p);
	return 0;
}

2차원 배열의 동적할당 :

    int arr[3];	//정적 배열, 스택에 생성됨
	//1차원 배열의 동적 할당
	int* p = malloc(sizeof(int) * 3);	// int[3] in heap
	char *p2 = (char*)p;				// char[12] in heap

	//2차원 배열의 동적 할당
	int arr2[2][3];	//정적 배열
	int(*p3)[3] = malloc(sizeof(int) * 2 * 3);

 

'삼성전자 알고리즘 > 자료구조 알고리즘' 카테고리의 다른 글

BFS / DFS  (0) 2019.06.12
분수 계산  (0) 2019.06.02
11. B트리 / B+트리 / B*트리  (0) 2019.05.16
10. 트리  (0) 2019.05.16
9. 스택  (0) 2019.05.16