ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [바킹독의 실전 알고리즘 | 0x02강] 기초코드 작성 요령2 복습
    알고리즘/바킹독 알고리즘 복습 2026. 10. 21. 01:06

     

    1. STL과 함수 인자

    다음 함수의 출력값을 예측해보자

    void func(int a){
        a = 5;
    }
    
    int main(void) {
        int t = 0;
        func(t);
        cout << t;		// 0
    }

    int를 함수 인자로 사용할 경우, 값을 복사해 사용함. 

    따라서, 함수에서 값을 바꾸더라도 main의 변수에는 영향을 주지 않음

    void func(int arr[]){
        arr[0] = 10;
    }
    
    int main(void){
        int arr[3] = {1, 2, 3};
        func(arr);
        cout << arr[0];	// 10
    }

    배열 arr를 함수 인자로 사용할 경우, arr의 주소를 참조함.

    따라서, 함수에서 값을 바꾸면 원본의 값에도 영향을 미침

    struct pt{
        int x, y;
    };
    
    void func(pt a){
        a.x = 10;
    }
    
    int main(void){
        pt tmp = {0, 0};
        func(tmp);
        cout << tmp.x;	// 0
    }

    구조체를 함수 인자로 사용할 경우, 값을 복사해 사용함.

    따라서, 함수에서 값을 바꾸더라도 main의 변수에는 영향을 주지 않음

     

     

    # 참조자를 활용한 swap 함수 구현

    void swap1(int a, int b){
        int tmp = a;
        a = b;
        b = tmp;
    }

    원본 값이 아닌 복사된 값 2개를 swap하므로, 원본 값은 그대로임

    void swap2(int* a, int* b){
        int tmp = *a;
        *a = *b;
        *b = tmp;
    }

    포인터(*)를 활용해 주소값을 swap 하여 원본의 값을 바꿀 수 있음

    void swap3(int& a, int& b){
        int tmp = a;
        a = b;
        b = tmp;
    }

    또는 참조자(&)를 활용해 원본 값을 참조하고, 함수 내에서 int 값을 사용하듯이 변수의 값을 바꿔 원본을 바꿀 수 있음

    참조자를 사용하는 경우, 포인터 사용시 Null pointer에 값을 넣거나 type이 다른 변수를 캐스팅하는 문제를 예방할 수 있음

     

     

    # STL(Standard Template Library) - vector

    • STL은 C++ 라이브러리로 다양한 알고리즘과 자료구조가 구현되어 있음
    • vector STL은 가변 배열로, 배열의 크기를 동적으로 선언할 수 있음
    vector<int> V(100);	// int 타입의 0으로 초기화된 100칸 짜리 가변 배열 V 선언
    V[20] = 10;
    V[60] = -4;
    void func1(vector<int> v){
        v[10] = 7;
    }
    
    int main(void){
        vector<int> v(100);
        func1(v);
        cout << v[10];	// 0
    }

    main 함수에서 STL을 함수 인자로 넘길 경우, 함수 내부에서는 단순히 값을 복사해서 사용함

    따라서 STL은 원본 값을 바꿀 수 없으므로 0이 출력됨.

     

Designed by Tistory.