이번편은 컨테이너의 포인터 타입에 대해 비교타입을 특정하라입니다. set이나 map과 같은 associative container들은 항상 정렬상태를 유지하는 특징을 갖고 있습니다. 이때 정렬상태는 기준이 되는 특정 함수를 통해 비교를 통해 상태를 유지합니다. set의 생성자함수 정의를 보면 알 수 있지만 비교를 위한 함수를 생성자를 선택하지 않으면 내부적으로 less를 함수포인터로 갖게 됩니다. less의 구현 less는 별다른 동작 없이 < 연산만을 하여 그 결과를 반환합니다. 하지만 T가 pointer type인경우는 어떻게 될까요? 결론은 포인터 주소를 비교하게 되게 때문에 원하는 대로 정렬이 되지 않습니다. less를 한다해도 역시 *T 로 비교하지 않는 이상 의미가 없구요 따라서 사용자 정의 ..
이번 장은 간단하면서도 STL사용에 있어 중요한 장입니다. 제목과같이, 컨테이너의 요소로써 포인터를 사용한다면 컨테이너가 소멸되기전 필수로 각 객체의 메모리를 해제하라입니다. 위의 코드는 단번에 문제가 어디서 발생하는지 알 수 있습니다. 컴파일도 잘되며 실행하는데 런타임에 죽거나 하는 문제가 생기지 않을것입니다. 하지만 메모리의 누수는 심각한 문제로 다가옵니다. 작은 프로그램에서, 요즘같은 성능이 좋은 컴퓨터에서야 얼마나 문제가 발생하겠냐만 컨테이너에 들어가 있던 객체 몇십만개 였다면? 그 객체 자체의 크기가 크다면? 또는 그 객체가 물고 있던 메모리들은? (객체의 소멸자가 호출되어 물고 있던 자원을 해제한다면) 또는 서버와 같이 오랫동안 메모리에 올라가 있어야할 프로그램에서 꾸준히 메모리 누수가 발생한..
이번 주제는 컨테이너의 원소가 비어있는지 여부를 확인하기 위해 size()보다 empty()를 호출하라는 주제입니다. 하지만 결론부터 말씀드리면 c11에 와서는 성능상의 차이가 없게 되었습니다. 다만 코드에서 좀더 표현을 명료하기 위해 비어있는지 여부를 확인한다면 size()보다 empty가 좋을것입니다. (또한 size()==0)은 비교의 과정이 한번 더 들어가므로 이 보단 empty()로 한번에 해결함이 낫긴 할겁니다) 앞서 언급한바와 같이 현재는 size()가 상수시간입니다. http://www.cplusplus.com/reference/list/list/size/ 실제로 stl::list::size함수를 보면 다음과 같이 단순히 멤버변수를 반환하게 되어 있습니다. 하지만 splice를 함수의 헤더..
함수포인터에 대한 기초적인 사용 방법은 https://www.joinc.co.kr/w/Site/C/Documents/FunctionPointer 에서 참고바랍니다. 함수포인터의 사용의의라 하면 유연하게 코딩을 할 수 있다는데 있겠습니다. 또 코드의 양을 줄일수도 있습니다. 거두절미 하고 코드로 먼저 확인하겠습니다. 헤더파일에 typedef로 정의된 함수포인터는 두가지가 있습니다. ElementComprator ReturnValueComprator typedef로 정의해서 간략하게 함수포인터를 이용할 수 있습니다. 그렇지 않으면 일일이 함수의 헤더를 그대로 적어야겠죠. ElementComprator는 사용자정의 comp함수입니다. 클래스의 객체를 만들어 낼 때 매개변수로 넘길 수 있는데 이 함수포인터는 R..
c+11에서는 템플릿별칭에 대해서 typedef가 아닌 using을 사용하라고 권장하나 봅니다 ( http://occamsrazr.net/tt/174) 본 문제를 해결하기 위해 stackoverflow에 질문을 해보고 답변대로 해결되었습니다 http://stackoverflow.com/questions/42477805/how-can-i-resolve-this-matter-c-template-with-typede 알고리즘 문제를 풀기 위해 trep을 만드려는데 별칭과 템플릿에 관한 문제가 발생해서 한참을 뒤진 결과 드디어 '컴파일'하는데만 성공했네요 보시다시피 헤더파일과 cpp파일을 분리하려고 합니다. 우선 헤더파일에서 클래스 안에 pair에 대한 별칭을 주고 있습니다. 원래는 클래스 밖에서 이를 usin..
어제 도서관에서 Effective Modern C++을 빌려 C++ 공부를 시작했습니다. ....... 한마디로 쉽지 않더군요. Effective Java 2는 그래도 어느정도 이해할만 했는데 말이죠. (시리즈 책은 아닙니다) 어쨋든 그동안 자바로만 열심히 공부하다 근래에 알고리즘을 공부하면서 C++를 자연스럽게 쓰게 되면서 C++에 관심을 갖고 공부를 시작하고 있습니다. 여튼 1장에서는 auto를 런타임 시점에 결정하기 위한 형식 연역규칙에 대한 설명이 언급되어 있습니다. 이에 대한 자세한 내용은 검색하시면 많은 블로그에서 책의 내용을 그대로 설명하고 있습니다. (이래도 되나?) 근데 읽으면서 배열에 대한 참조를 언급하는 도중 포인터로의 붕괴라는 말이 언급되더군요. 무슨말이지? 구글에서 한글로는 검색해..
- Total
- Today
- Yesterday
- linux
- Codejam
- 중국
- cpp
- STL
- 악보
- 피아노
- peram jam
- 정규표현식
- 드럼
- 중국여행
- regex
- 알고리즘
- kernerl
- 카카오 공채
- link
- 사천
- printf
- 코드잼
- 여행
- Pointer
- C language
- Spring
- yiruma
- C++
- python
- compile
- Algorithm
- 문자열
- 이루마
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |