본문 바로가기

분류 전체보기131

C++ 기초 : 함수 포인터 Bubble Sort 함수를 만들어 어떤 배열을 정렬한다고 합시다. BubbleSort(배열); 이런 식으로 함수를 호출하고 배열을Bubble Sort 방식으로 정렬하게 될 겁니다.  근데 배열을 어떤 방식으로 정렬할지선택할 수 있으면 더 좋지 않을까요? 예를 들어  Sort(배열, 정렬방식); 이렇게 말이죠. 함수 포인터를 이용하면예시로 든 코드처럼 사용이 가능합니다.  아래 코드는 함수 포인터를 간단하게 구현한 것입니다. Test 함수가 있습니다.해당 함수는 매개변수로 아무것도 받지 않네요.(매개변수가 없을 경우, void를 적어이를 명시해 주거나 그냥 빈 괄호로 둡니다.)  14번째 줄이 바로 함수 포인터입니다. Test 함수의 반환값이 없.. 2024. 4. 8.
C++ 기초 : 버블 정렬 버블 정렬(Bubble Sort)이란,서로 인접한 두 개의 값을 비교하여 필요 시교환을 수행하고 이를 전체 자료에 걸쳐 반복하는 것입니다. Bubble Sort 알고리즘을 통해값을 오름차순 또는 내림차순으로 정렬할 수 있습니다.     Bubble Sort를 수행하는 함수를 만들어가변 배열의 수를 정렬하도록 하겠습니다.  우선은 가변 배열에 랜덤한 값을 대입하도록 하죠. 랜덤 함수를 이용할 것인데 랜덤 함수를 이용하기 위해 "time.h" 파일을 포함시켜 줍니다. rand 함수를 통해 랜덤한 수를 얻을 수 있긴 하지만,그냥 사용하면 다시 실행해도 계속 같은 수가 나오게 됩니다. 우리가 무작위로 숫자를 종이에 적었다고 합시다.근데 항상 그 종이만 보고 값을.. 2024. 4. 7.
C++ 기초 : 리스트 (1) Linked List(연결형 리스트)라는 것이 있습니다. 동적 할당 공간이 필요할 때마다 공간 하나를 할당합니다.일단 필요한 공간을 배열 형식으로 할당하는 가변 배열과는 다르죠. Linked List는 할당될 때마다 이전 공간과 다음 공간을 연결해 줍니다.이전 공간에 다음 공간의 주솟값을 저장하고 있는 것이죠. 이러한 공간을 각각 Node(노드)라고 부릅니다.       Linked List를 구조체로 구현을 해 봅시다. LinkedList.h 파일에 구조체와 함수를 선언할 것이고LinkedList.cpp 파일에 함수를 정의할 것입니다.  LinkedList.h 파일에 두 개의 구조체를 선언하였습니다.  먼저 구조체 _tagList를 살펴 보죠. .. 2024. 4. 7.
C++ 기초 : 가변 배열 (3) 동적 할당된 공간에 새로운 데이터를 넣으려고 합니다. 근데 해당 공간이 꽉 차서 공간을 늘려줘야데이터를 넣을 수 있는 상황입니다. 이 공간을 늘려주는 함수를 만들어 보죠.  아래와 같은 상황에서 pInt가 가리키고 있는 heap 영역의 공간에서1번 인덱스 뒤에 공간을 추가하는 게 가능할까요? 불가능합니다.  1번 인덱스 뒤에 주솟값은 5008번지겠죠? 그곳엔 어떤 데이터가 들어있을지 모릅니다. 그래서 무작정 1번 인덱스 뒤에 공간을 사용하려고 하면프로그램 전체적으로 봤을 때 문제가 생길 수 있죠. pInt를 통해서 5008번지에 1000을 넣으려고 했는데그 공간이 '몬스터의 체력'으로 사용되고 있는 공간이라면3.14의 값이어야 하는 몬스터의 체력이 갑자기 .. 2024. 4. 7.
C++ 기초 : 가변 배열 (2) Arr.h 파일에서 가변 배열(int형)을 위한 구조체 tArr을 선언하였습니다. 멤버는힙 영역 공간의 주솟값을 받을 수 있도록 int형 포인터 변수 pInt와현재 값이 들어가 있는 배열의 개수를 나타내는 변수 iCount,현재 할당된 배열의 최대 개수를 나타내는 변수 iMaxCount입니다.  이후 main.cpp에서 tArr 자료형을 가진 객체를 초기화하려고 하였는데초기화할 때마다 멤버 하나씩 값을 지정해주어야 하네요. 차라리 초기화를 해 주는 함수를 따로 구현하는 게 나아 보입니다. 객체를 초기화하기 위한 함수의 선언을 Arr.h 파일에 해주고  정의는  Arr.cpp 파일에 했습니다. 객체의 주솟값을 받아 멤버에 직접 접근할 수 있게 합니다... 2024. 4. 6.
C++ 기초 : 가변 배열 (1) 아래 코드처럼 배열을 선언할 때, 배열의 개수를 정하기 위한 대괄호 안에변수를 넣을 수 없는 이유는 무엇일까요? a는 변수이기 때문에 값이 변할 수 있고 이것을컴파일러가 미리 예상해서 메모리 공간을 할당하는 것은불가능하기 때문이죠?  만약 아래 코드처럼 scanf 함수를 통해 a의 값을정할 수 있어 100을 입력했다고 합시다. 100을 입력하는 동작은 런타임 중에 발생합니다.근데 이것을 런타임 전 컴파일 과정에서 예상하고 미리 400Byte(int형 배열이 100개)의 공간을 할당할 수 없겠죠?  구조체의 경우도 같습니다. 구조체도 사용자 정의 자료형이라는 것 외의는 일반 자료형과 다르지 않기 때문이죠.     Instance(객체)라는 개념이.. 2024. 4. 6.