-
[바킹독의 실전 알고리즘 | 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이 출력됨.
'알고리즘 > 바킹독 알고리즘 복습' 카테고리의 다른 글
[바킹독의 실전 알고리즘 | 0x01강] 기초코드 작성 요령1 복습 (0) 2026.10.21