C,C++/C++51 [C++] 가독성을 위해 default와 delete 키워드를 사용하기 (클래스) 가독성을 위해 default와 delete 키워드를 사용하자 [배경] 클래스 작성 시 우리가 직접 작성하지 않아도 기본적으로 컴파일러가 생성해주는 것들이 있다. 그 대표적인 예로 기본 생성자, 기본 소멸자, 기본 복사생성자, 기본 대입 연산자 등이 그렇다. 기본적으로 컴파일러가 생성해준 복사생성자와 대입 연산자는 객체 복사 시 얕은 복사를 수행한다. 물론 멤버 변수가 값 형식일 경우 또는 주소를 그대로 복사해도 될 경우 깊은 복사를 하지 않아도 된다. 이 경우는 컴파일러가 알아서 만들어주는 것들을 써도 되기에 굳이 복사 생성자와 대입 연산자를 작성하지 않아도 되는 경우이다. 하지만 이는 코드를 짠 사람만 한눈에 이해할 수 있다. 게다가 코드가 매우 길다면 작성자 마저도 헷갈릴 수 있다. 또한 코드를 보는.. 2020. 2. 29. [C++] static_assert 매크로에 대해 알아보자. C++ 11에서 등장한 static_assert 키워드에 대해 알아보자. 기존 assert의 기능 자체에 대해선 간단한 소개만 할 것이니, assert에 대한 더 자세한 내용을 원하면 다음 포스팅을 참고하자. https://woo-dev.tistory.com/52 [assert 기능 및 목적] assert는 프로그램 개발 시 사용자의 실수를 개선해주기 위한 매크로로서, 어떤 조건을 인자로 받아 해당 조건이 거짓일 경우 프로그램을 중단시킨다. 이는 보통 프로그램 로직 상 일어나서는 안되는 조건을 인자로 넣어주어 프로그램 실행 시 assertion이 발생하면 그 조건을 찾아 디버깅 하는 것이다. assert는 프로그램 성능에 영향을 미치지 않으므로 많이 사용해도 상관없다. void main() { int n.. 2020. 2. 28. [C++] 스택과 힙 메모리, "RAII"라는 패턴 및 기법에 대해 알아보자 RAII가 스마트 포인터와 연관이 있어 해당 카테고리에 작성한다. 먼저 지역 변수와 매개변수가 저장되는 스택 메모리에 대해 알아보자. 스택 메모리 (Stack memory) 스택은 지역 변수와 매개변수가 저장되는 공간이며 예약된 지역 메모리 공간이다. 예약된 메모리라는 말은 동적 할당처럼 사용자의 입력 N에 따라 할당하려는 크기가 변하는 것이 아니라 int arr[10]과 같이 컴파일 타임에 그 크기가 미리 정해지는 메모리란 뜻이다. 예약된 메모리 공간이기 때문에 동적으로 할당하는 힙 메모리와 달리 메모리 할당과 해제에 대한 오버헤드가 없다. 스택은 데이터를 저장할 때 스택의 경계를 넘어 다른 영역이 침범되는 것을 막기 위해 한계치(가장 높은 주소)부터 거꾸로 저장한다. 즉 스택의 top은 스택 메모리 .. 2020. 2. 23. [C++] 추상 클래스와 순수 가상함수를 알아보자(feat. 인터페이스, 다중상속) 추상 클래스 추상 클래스란 순수 가상함수를 1개 이상 가지고 있는 클래스를 말한다. 순수 가상함수란, 구현되지 않은 가상함수를 말한다. 구현되지 않은 가상함수란, 상위 클래스에서 정의는 하지 않고 선언만 해놓은 가상함수를 말한다. 순수 가상함수는 다음과 같이 표시한다. 가상 함수에 0을 대입하여 해당 클래스에선 구현하지 않겠다라는 의미를 부여한다. virtual void PureVirtualFunction() const = 0; // 순수 가상함수 가상 함수를 모른다면 https://woo-dev.tistory.com/50 첫 번째 클래스는 추상 클래스이며 두 번째 클래스는 추상 클래스가 아니다. 1. class FirstClass { public: ... void SampleFunction() cons.. 2020. 2. 20. [C++] iterator를 이용한 삽입 정렬(Insertion sorting) 구현 - 알고리듬 주어진 vector를 이중 loop를 이용하여 정렬한다. 우선 첫 루프는 이전 요소들과 비교하기 위한 고정 요소를 set하는 루프이다. 고정 요소는 두 번째 요소부터 시작한다.두 번째 루프는 첫 루프의 고정 요소와 비교할 요소를 set하고 정렬을 위한 조건을 검사한다. 내림 차순을 기준으로 고정 요소가 더 크다면 비교 요소의 앞에 삽입되어야 한다. 비교 요소가 더 크다면 올바른 순서이므로 고정 요소이전까지 증가시키며 비교한다. 여기서 핵심 부분은 고정 요소를 비교 요소 앞에 삽입하는 과정이다. vector::insert(iterator, value)를 이용하면 iterator가 가리키는 위치에 value를 삽입할 수 있다. 예를 들어 위 그림의 벡터에서 2를 가리키는 반복자와 3을 인자로 주.. 2020. 2. 13. [C++] insert 함수를 이용하여 vector 합치기 | 벡터(vector) 합치는 법 vector의 insert 멤버 함수를 이용한다. insert는 몇 가지로 오버로딩되어 있는데 그 중 하나를 이용하여 벡터를 합칠 수 있다. 여기서 벡터 A와 벡터 B를 합친다는 의미는 벡터 A의 끝에 벡터 B의 원소를 차례대로 연결한다는 뜻이다. template iterator insert (const_iterator position, InputIterator first, InputIterator last); 위 함수는 position이 가리키는 위치부터 [first, last) 위치의 요소를 추가한다. 따라서 v1 벡터와 v2벡터를 연결하고 싶다면 첫 인자로 v1.end(), 두 번째 인자로 v2.begin(), 세 번째 인자로 v2.end()를 준다. 멤버 함수 end()는 마지막 요소가 아닌 마지.. 2020. 2. 12. 이전 1 2 3 4 5 6 7 8 9 다음