프로그래밍 / C++ / 언리얼

Programming/C | C++ | Unreal 18

[C++] 자료구조 - 힙(Heap)

힙 (Heap) 힙(Heap)은 완전 이진 트리에 있는 노드 중에서 값이 가장 큰 노드나 값이 가장 작은 노드를 찾기 위해 만든 자료구조다. 값이 가장 큰 노드를 찾기 위한 힙을 최대 힙(Max Heap), 가장 작은 노드를 찾기 위한 힙을 최소 힙(Min Heap)이라고 한다. 힙은 우선순위 큐(Priority Queue)라고도 한다. STL에서는 std::priority_queue로 구현이 되어 있다. std::priority_queue - cppreference.com template class priority_queue; A priority queue is a contain..

[C++] 자료구조 - 큐 (Queue)

큐의 개요 Queue 컨테이너는 FIFO( First In First Out)방식의 컨테이너를 구현한 템플릿 클래스다. 컨테이너지만 정확하게는 어댑터 컨테이너라고 불린다. 큐의 초기화 #include std::queue q; std::queue q; // 페어큐 선언 큐의 함수 삽입 원소를 추가한다. q.push(element) q.push(make_pair(fisrt_element, second_element)); // 페어큐의 푸시 삭제 첫번째 원소를 제거한다. q.pop() 참조 첫번째 원소를 반환한다. q.front() // 페어큐의 참조 q.front().first; q.front().second; 마지막 원소를 반환한다. q.back() // 페어큐의 참조 q.back().first; q.ba..

[C++] 자료구조 - 스택 (Stack)

스택의 개요 stack 컨테이너는 LIFO( Last In First Out)방식의 컨테이너를 구현한 템플릿 클래스다. 컨테이너지만 정확하게는 어댑터 컨테이너라고 불린다. 스택의 초기화 #include stack s1; // 단일 스택 초기화 stack s2; // 페어 스택 초기화 스택의 함수 삽입 원소를 최상단에 삽입한다. s.push(element) 삭제 최상단 원소를 제거한다. s.pop() 참조 최상단 원소를 반환한다. s.top() 사이즈 현재 들어있는 원소의 개수를 int형으로 반환한다. s.size() 비어있는지 확인 s.empty() 스택 예제 기본예제 #include #include using namespace std; int main() { stack sung; sung.push (1..

[C++] 자료구조 - 배열(Array)

배열의 개요 배열(Array)은 같은 타입으로 된 여러 개의 객체를 한 번에 다루고자 할 때 사용한다. 아래 그림처럼 메모리 상에서 배열은 각 원소가 연속적으로 배치된다. int grade1; int grade2; int grade3; // ... int grade30; 각 반마다 학생 수를 담는 변수를 선언한다고 해보자. 딱 봐도 뭔가 좋지 않다. 만일 학생 수가 30명이 아니라 100명이라면? 1000명이라면? 코드를 읽기도 매우 힘들어질 것이고, 작성하는 것도 쉽지 않을 것이다. 위의 예시를 배열로 바꿔보면 아래와 같다. 훨씬 더 간결해지고 보다 직관적으로 표현이 가능해진것이다. int grades[30]; 배열의 초기화 • 배열의 초기화는 { }을 사용한다. • 모든 원소에 대해 초기값을 지정하지..

[C++] 객체지향 심화.

클래스의 구성요소 클래스란? 자료저장 + 자료처리 = 변수 + 함수 특정한 용도를 수행하기 위한 변수와 함 수를 모아 둔 틀(설계도) 객체란? 오브젝트라고 불리우며, 그 틀(설계도)를 이용하여 찍어낸 개체(변수, 메모리 상의 공간) 사용자 정의 타입 데이터 멤버 데이터를 저장한다. 필드(Field)라고도 한다. 멤버 함수 타입의 기능 부분이다. - 메소드(Method)라고도 한다. 내부 타입 클래스 안에 다른 클래스를 만들거나, 열거형, 혹은 타입 별칭을 지정할 수 있다. 멤버 템플릿 템플릿을 작성할 수도 있다. 클래스 범위 클래스 범위는 클래스의 데이터 및 멤버함수가 이 규칙을 가진다. 멤버 함수를 정의할때 일반한수와 달리 클래스 범위 연산자 ::를 사용해야 한다. 그 이외에 지역범위, 파일범위, 함수..

[C / C++] 객체지향 언어 왜 필요한가?

객체 지향 프로그래밍 개요. 현대 프로그래밍의 패러다임으로 잡혀있고, 절차지향의 한계점을 극복하기위해 나타남. 절차지향 프로그래밍의 한계 데이터끼리 다루는 함수가 분리되어 있다. - 함수 내부에서 포인터로 데이터를 다뤄야 하는 불편함이 있다. 함수의 이름을 다르게 작성해야 한다. - 전역 이름공간을 사용하기에, 함수마다 이름을 다르게 지어주어야한다. 프로그램을 확장하기 불편하다. - 프로그램에 수정사항이 생기면, 포인터로 데이터 처리한 것들을 일일이 바꾸어주어야한다. 객체지향 4대 개념. 캡슐화 - 클래스(Class)를 통해 변수와 함수를 하나의 단위로 묶는 것을 의미한다. - 특징 : 이 클래스를 선언하고, 해당 클래스의 인스턴스를 통해 클래스 안에 포함된 멤버 변수와 메소드에 쉽게 접근할 수 있다. ..

[C / C++] printf함수 구현 (putchar, putc) 이용

#include #include void myprintf(const char* format, ...) { va_list args; va_start(args, format); while (*format) { if (*format == '%') { format++; if (*format == 0) // %다음에 0이나올수도 있으니 예외처리를 해준다. { break; } char* str; // 문자열 출력을 위한 char 타입 1차원 배열 선언 int val; // 정수형 출력을 위한 int 타입 변수 선언. switch (*format) { case 'c': val = va_arg(args, int); putchar(val); break; case 'd': val = va_arg(args, int); in..

[C / C++] 문자열 주요함수 구현.

공통구현 컴파일 오류 방지를 위해서 공통으로 define _CRT_SECURE_NO_WARNINGS을 선언하고, C언어의 입출력을 담당하는 헤더파일인 stdio.h를 선언해준다. 1. strcpy() #define _CRT_SECURE_NO_WARNINGS #include char* strcpy(const char* s1, char* s2) { while (*s1 != NULL) { *s2 = *s1; // 역참조를해서 값을 꺼내서 비교를 한다. ++s1; ++s2; // str = str[0]이랑 같은뜻이다. 주소의 첫번째부터 1씩 더해주면 배열의 인덱스가 늘어난다. } return s2; // 최종적으로 str2를 반환한다. } int main() { //[strcpy] : 문자열 복사하기 const..

[C++ ] 구조체

구조체란? - 변수를 모아 놓은 집합체 - 특정 변수들이 무언가의 하위 개념으로 묶일 수 있을 때 studentName[10], studentAge[10], studentKorScore[10] .... 학생의 'XXX' 이름, 나이, 국어점수, 석차 등등을 '학생' 이라는 구조체로 묶어서 사용 구조체와 비교 - 구조체 : 데이터(자료형)을 실제로 쓰이는 데이터끼리 묶어서 추상화 - 배열 : 속성이 동일한 여러개의 데이터를 같은 이름과 순서를 지정한 연속된 번호로 서로 연관되어 있음을 표시함으로써 추상화함 - 함수 : 프로세스(코드)를 특정 기능 단위로 묶어서 추상화 구조체 정의 - 구조체가 사용되는 함수의 앞에 정의한다. (해당 함수의 바깥쪽 앞(위)) // main함수 앞에다!! struct score..

[C++] rand(), 삼항연산자 이용

// 실습1. 3 ~ 7 사이의 랜덤한 숫자를 출력하는 프로그램을 작성하자. // 실습2. 가장 작은 값과 큰 값을 입력 받아서, 그 사이의 임의의 값을 출력하는 프로그램을 작성하자. // 실습3. 프로그램을 실행하면 내부적으로 1 ~ 10 사이의 숫자가 정답으로 정해진다. // 유저가 1 ~ 10 사이의 숫자를 입력하면 맞으면 true, 틀리면 false를 출력한다. (숫자 맞추기 게임) #include #include using namespace std; int main() { // 실습1 srand(time(NULL)); // 다양한 난수를 위해 time함수를 사용 int number = rand() % (7 - 3 + 1) + 3; // 랜덤값을 담을 변수 선언 cout bNum; // 큰 값 입..

반응형