지난 포스팅에 이어서 C++ 최신 버전에서 추가된 문법들에 대해서 공부한 내용을 정리해 보려고 한다. 새로운 자료형 nullptr NULL을 쓰면 가끔 이상한 일이 발생된다. C++에서 NULL은 어떤 타입이 아니라 0이다. 따라서 함수를 호출할 때 적합하지가 않다. 따라서 nullptr가 등장하였다. nullptr는 null 포인터 상수이다. nullptr는 다음과 같이 사용할 수 있다. // Main.cpp Class* myClass = new Class("COMP3200"); const Student* student = myClass->GetStudent("Coco"); if (student != nullptr) { std::cout GetID()
씨쁠쁠
이번 포스팅에서는 STL 알고리즘에 대한 간단할 설명 및 C++ 최신 문법에서 추가된 키워드, 자료형, STL 등에 대해서 알아보고자 한다. STL 알고리즘 STL 알고리즘이란 요소 범위에서 쓸 수 있는 함수들을 의미한다. 따라서 배열 또는 몇몇 STL 컨테이너에서 쓸 수가 있다. 이 때 반복자를 통해 컨테이너에 접근한다. 컨테이너의 크기를 변경하지 않기 때문에 추가 메모리 할당도 없다. 유형별로 다음과 같이 호출하는 include 문이 다르다. #include 변경 불가 순차(sequence) 연산 : find(), for_each() 변경 가능 순차 연산 : copy(), swap() 정렬 관련 연산 : sort(), merge() #include 범용 수치 연산 : accumulate() 예를 들어..
이번 포스팅에서는 템플릿 프로그래밍에 대해서 정리해 보려고 한다. 첨부한 이미지는 포큐 아카데미의 C++ 강의 내용 화면이다. 템플릿이란 Java나 C#에서 제네릭(generic) 메서드/클래스와 비슷하다. 컴파일 도중 모든 코드를 만들어 준다. STL 컨테이너 또한 템플릿이라고 볼 수 있다. 템플릿이 가진 첫 번째 장점은 코드를 자료형마다 중복으로 작성하지 않아도 된다는 점이며, 두 번째로는 컴파일러가 미리 코드를 만들어 주기 때문에 런타임에서 돌리면 느린 함수들을 컴파일 시에 미리 호출해서 최종 결과만 상수로 뽑아서 쓸 수가 있다. 함수 템플릿 예를 들어 두 수를 더하는 Add 함수가 있다고 가정해 보자. int를 더할 수도 있고, float를 더할 수도 있고, double을 더할 수도 있다. // ..
이번 포스팅에서는 STL의 맵(Map)에 대해서 정리해 보려고 한다. 첨부한 이미지는 포큐 아카데미의 C++ 강의 내용 화면이다. 맵(Map) 맵은 STL 컨테이너에서 Key-Value 형태로 데이터를 저장하는 구조이다. 키는 중복될 수 없다. C++맵은 키 값을 기준으로 자동으로 정렬이 되는 컨테이너이다. 그리고 맵은 이진 탐색 트리(BST) 기반이다. 빈 맵을 만들 때는 key와 value의 타입을 반드시 선언해 주어야 한다. 그리고 어떤 맵과 같은 크기 및 데이터를 가지는 맵을 초기값으로 생성해서 맵을 만들 수도 있다. 두 개의 데이터를 하나의 단위로 저장하는 구조를 pair 라고 한다. 맵에 새로운 요소를 삽입하려고 할 때에는 insert() 메서드를 사용한다. 이 때 반환은 반복자(iterato..
C++에서 예외를 어떻게 처리하는지에 대해서 알아보도록 한다. C++에서도 예외를 지원한다. 다만 C++에서는 예외의 중요성이 다른 언어(ex. JAVA)에 비해서 좀 떨어진다. JAVA나 C#에 당연히 있는 예외가 C++에는 없는 경우도 있다. 그래서 이번 포스팅에서는 올바른 사용법 위주로만 알아본다. 예외를 남용하는 것은 지양해야 한다. 예외가 발생하는 상황 첫 번째 예외 발생 상황은 범위 이탈이다. 다음과 같이 범위를 넘어서서 참조를 하는 상황일 경우 에러가 발생하고 try/catch를 통해서 예외 처리를 해줄 수 있다. try/catch가 없는 경우 Visual Studio는 핸들링이 되지 않은 exception이 있는 경우 breakpoint를 걸어주는 기능이 있다. 참고로 아래와 같은 코드는 ..
오늘은 C++에서 참조와 문자열에 대해서 공부한 내용을 정리해 보고자 한다. 참조는 값을 매개변수에 전달하는 방식이다. 이를 할 때 C에서는 포인터를 이용한 연산이 많이 있었다. 성능적인 면에서는 우수했을지 모르지만 연산이 복잡해지고 안전하지 않은 경우가 생긴다는 단점이 있었고, 그래서 자바에서는 포인터를 없애면서 쉽게 참조를 하게 되었다. 하지만 그러다보니 성능적으로 아쉬움이 많이 생겼다. 그래서 C++에서는 포인터도 사용하되 포인터가 필요 없을 때는 훨씬 더 안전하게 참조를 하는 방법도 생겼다. 어떤 데이터를 불러오는 것을 호출이라고 하는데, 참조할 때도 이 개념이 쓰인다. 호출은 크게 두 가지로 나누어서 생각할 수 있는데 값에 의한 호출(Call By Value)과 참조에 의한 호출(Call By ..