전체 글
-
[알고리즘] C++로 구현한 이진 탐색 (Binary Search)알고리즘 2021. 8. 17. 15:49
이진 탐색 한번 반복할 때마다 탐색 범위를 반으로 줄여나가는 탐색 방법. 정렬된 데이터의 목록에만 사용이 가능하다. 탐색 과정 우선 어떤 방식으로 탐색이 진행되는지 알고리즘을 살펴보자. 아래의 배열에서 100을 찾아보겠다. 먼저 배열 중앙값인 50과 찾는 값인 100을 비교한다. 배열은 정렬되어 있고, 100은 50보다 크므로 50 이하의 값들은 탐색 대상에서 제외한다. 5번과 9번 배열의 중앙에 있는 7번 배열의 값인 80과 찾는 값인 100을 비교한다. 100은 80보다 크므로 80 이하의 값들은 제외한다. 8번과 9번 배열의 중앙에 있는 8번 배열의 값인 90과 찾는 값인 100을 비교한다. 100은 90보다 크므로 90 이하의 값들은 제외한다. 9번과 9번 배열의 중앙에 있는 9번 배열의 값인 1..
-
[C++] 증감 연산자 오버로딩(전위 연산자, 후위 연산자)C++ 2019. 9. 4. 00:38
증감 연산자 증감 연산자는 피연산자로부터 값을 더하거나 빼기 위한 단항 연산자인데, 연산이 이루어지는 시점에 따라 전위 연산자, 후위 연산자로 나뉜다. 단순히 증감 연산자의 사용만이 목적이라면 연산이 이루어지는 시점만 알아도 사용이 가능하지만, 증감 연산자를 직접 오버로딩 하기 위해서는 내부가 어떻게 동작하는지에 대한 이해가 필요하다. 전위 연산자와 후위 연산자를 오버로딩한 아래의 예제를 보자. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 #include using namespace std..
-
[C++] 함수 포인터C++ 2019. 8. 27. 09:01
함수 포인터 함수도 변수와 마찬가지로 메모리 어딘가에 저장되어 주소를 가지고 있고, 이 주소를 담기 위한 포인터 변수를 선언할 수 있다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 #include using namespace std; int func() { return 5; } int goo() { return 10; } int main() { int(*fcnptr)() = func; // 함수 포인터의 선언(함수의 이름은 함수가 저장된 주소를 나타낸다) cout
-
[C++] Tuple (복수의 값 반환)C++ 2019. 8. 22. 17:51
Tuple 함수는 일반적으로 하나의 반환값을 반환하는데, tuple이라는 클래스를 이용해서 복수의 값을 반환할 수 있다. 예) 복수의 값을 튜플로 반환 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 #include #include using namespace std; tuple getTuple() { int a = 10; double d = 3.14; return make_tuple(a, d); } int main() { tuple my_tp = getTuple(); cout
-
[C++] const 위치에 따른 포인터의 의미C++ 2019. 7. 18. 11:53
포인터는 값을 변경하는 방식이 두가지가 있다. 1. 역참조를 통해 주소가 가리키고 있는 값을 변경 2. 포인터가 가리키는 주소를 변경 그렇기 때문에 각각에 대해서 const를 선언할 수 있는데, const의 위치에 따라 그 의미가 달라진다. 자료형 앞에 const 키워드가 붙는 경우 (상수를 가리키는 포인터 혹은 포인터가 가리키는 변수의 상수화라고 하기도 한다.) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 #include using namespace std; int main() { int value1 = 5; const int* ptr = &value1; int value2 = 6; ptr = &value2; // *ptr = 6; 불가능 } cs 이렇게 선언된 포인터는 가리키는 주소 값..
-
[C++] 참조 변수(Reference variable)C++ 2019. 7. 18. 11:45
참조 변수란? - 같은 메모리 주소에 다른 이름을 붙여 사용하는 것으로 대상을 별명으로 부르는 것과 유사하다. - 참조 변수는 참조자라고 부르기도 한다. - 참조 변수는 포인터와 달리 &변수명으로 선언한다. 참조 변수의 주소 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 #include using namespace std; int main() { int value = 5; int *ptr = nullptr; ptr = &value; int &ref = value; cout
-
[C++] 메모리와 동적할당(new, delete)C++ 2019. 7. 17. 19:06
동적 할당이란? 컴파일 시점에 사용할 메모리 공간을 미리 지정해두지 않고 프로그램 실행 중에 필요한 시점에, 필요한 만큼의 메모리 공간을 할당하는 것을 말한다. 또한 사용이 끝나면 다시 운영체제가 쓸 수 있도록 반납이 가능하다. new 1 2 3 4 5 6 7 8 9 #include using namespace std; int main() { int *ptr = new int; } cs new 키워드는 입력한 자료형의 크기에 맞춰 OS에게 메모리를 받아온 다음, 그 주소를 반환한다. 즉 포인터 변수로 받아야 한다. delete 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 #include using namespace std; int main() { int *ptr = new int; c..