흔히 쉽게 사용하는 디자인패턴 singleton 패턴과 객체의 복사를 방지하는 noncopyable전략. 이 두가지는 boost에서 이미 손쉽게 사용할 수 있도록 지원하고 있습니다. 우선 boost가 소스가 있어야 하며 링크되어 있어야합니다. linux 기준으로 boost는 apt를 이용하여 쉽게 설치가 가능하며 cmake에서 이를 바로 사용할 수 있도록 지원하고 있습니다. install : sudo apt-get install libboost-all-devcmake : https://gist.github.com/PuppyRush/59ae3c26ee4f68f76c0f5305b3a4526d 그런 후 소스상으로 다음과 같이 구현합니다. 이와같이 구현하면 무난하게 싱글턴을 구현해낼 수 있습니다. thread-..
*본 글은 https://www.programering.com/a/MjMycDMwATQ.html의 포스팅을 번역 한 뒤 직접 실험하여 부가설명을 제가 붙였습니다. 이상한 부분은 지적 부탁드리겠습니다. printf함수 호출 과정 추적하기 우리는 위의 과정들을 통해 printf(“Hello World\n”)가 puts 함수로 변환됐음을 알 수 있습니다. 또 우린 puts가 libc.a 에 포함되어 있음을 알 수 있었습니다. 그리고 elf 파일인 ioputs.o에 puts와 _IO_puts 가 저장됨을 알 수 있었습니다. 그럼 printf 의 call trace를 할 수 있을까요? 다시말해 printf 함수는 순서대로 어떻게 작동할까요? 마지막으로 리눅스에선 커널의 int 0x80번지(커널모드를 진입하기 위한..
*본 글은 https://www.programering.com/a/MjMycDMwATQ.html의 포스팅을 번역 한 뒤 직접 실험하여 부가설명을 제가 붙였습니다. 이상한 부분은 지적 부탁드리겠습니다. printf의 숨겨진 뒷 이야기. 프로그래밍 언어를 말할 때, C언어에서 아마도 제일 간단하고 많이 알려진 코드는 Hello World일 것 입니다. printf라는 간단한 함수는 그 자체로 완벽하며 명료합니다. 하지만 그 뒤에서는 무슨일이 일어나고 있을까요? 아마 대부분 사람들은 이를 신경쓰지 않을것입니다. 그래서 우린 이 뒷이야기를 한번 논의해 보려합니다. 빨간배경은 명령어 라인이며 파란배경은 소스 코드 혹은 코드의 산출물에 해당합니다.( o,as 파일 등) 아래의 소스코드는 컴파일러를 통해 운영체제가 ..
얼마전부터 예전에 만든 프로젝트를 리팩토링하려 리눅스 환경에서 gcc를 이용해 프로젝트를 컴파일 하려는데 for each문에서 syntex error가 났습니다. 문제되던 해당 소스는 visual studio 2015(c++14) 에서 작성한 소스 였는데 c++을 지원하는 gcc6 에서 에러가 나는것입니다. 처음에는 ide로 사용하는 eclipse cdt 에서 c++11를 제대로 못찾는건가 싶어서 몇일을 삽질하였는데 알고보니 다음과 같은 문제였습니다. https://stackoverflow.com/questions/22836277/what-is-the-difference-between-for-each-in-and-for for each문은 msvc에서 가능한 문이며 호환성을 위해서는 for를 사용하되 :..
이번편은 컨테이너의 포인터 타입에 대해 비교타입을 특정하라입니다. set이나 map과 같은 associative container들은 항상 정렬상태를 유지하는 특징을 갖고 있습니다. 이때 정렬상태는 기준이 되는 특정 함수를 통해 비교를 통해 상태를 유지합니다. set의 생성자함수 정의를 보면 알 수 있지만 비교를 위한 함수를 생성자를 선택하지 않으면 내부적으로 less를 함수포인터로 갖게 됩니다. less의 구현 less는 별다른 동작 없이 < 연산만을 하여 그 결과를 반환합니다. 하지만 T가 pointer type인경우는 어떻게 될까요? 결론은 포인터 주소를 비교하게 되게 때문에 원하는 대로 정렬이 되지 않습니다. less를 한다해도 역시 *T 로 비교하지 않는 이상 의미가 없구요 따라서 사용자 정의 ..
c++에서 stl에 있는 associative container들은 객체나 값을 비교하는데 있어 비교를 이용하여 원하는 값을 찾거나 비교합니다. associative container에는 set, map이 존재합니다. 여기서 insert, find, erase등의 멤버함수들은 원하는 값을 찾거나 존재여부를 탐색하는데 앞서 언급한바와 같이 비교를 이용합니다. 이때 비교를 위해서 이번장의 주제이기도 한 equailty와 equlvalence를 이해 할 필요가 있습니다. 사실 설명에 앞서 책에서 내용과 달리 현재 std에서는 연관 컨테이너에서 크게 equality를 사용하지 않는것을 보입니다. 우선 더 깊은 설명 이전에 용어 설명을 하면 다음과 같습니다. equailty = 상등관계 c++에서는 opeator..
책에서 원제목은 Use "the swap trink" to trim excess capacity입니다. 책에서 소개된 swpa전략을 이용하면 실제 컨테이너에서 담겨 있는 객체의 크기(size)보다 Capacity가 크게 잡혀 있는경우 이를 size에 맞게 줄일 수 있는것으로 소개 되어 있습니다. 하지만 책이 쓰일 당시는 C++11이 나오기 이전이있기에 이러한 우회 전략이 소개되었지만 C++11이상부터는 shrink_to_fit 함수를 이용하여 size에 맞게 컨테이너의 크기를 간편하고 효율적으로 줄일 수 있습니다. 다음 URL을 참고하세요. http://www.cplusplus.com/reference/vector/vector/vector/
이번장은 C-style API와 stl의 혼용에 대한 장입니다. 이해하는데 달리 큰 어려운점은 없는 장이구요. stl의 vector와 string은 근본적으로 구조가 c-style array와 layout이 같습니다. 따라서 int*, char*등의 primitive type pointer와 vector, string의 포인터는 서로 사용이 가능합니다. 예를들어 다음과 같은경우입니다. 다음처럼 vc 원소를 &를 통해 pointer를 넘길 수 있습니다. 반대로, 배열 a의 사용방법도 이상이 없습니다. string의 경우에는 특별히 주의가 필요합니다. 왜냐하면 c api는 char array에서 null을 항상 요구합니다. 가령 strlen, strcpy같은 함수들이죠. 항상 char 문자열의 끝은 null..
STL의 사용에 있어 장점으로 다가오는 점 한가지는 c style의 배열과 달리 크기를 동적으로 할당함으로써 생산성을 높일 수 있고 메모리 사용에 있어 안정성을 높일 수 있다는 점 입니다 (물론 배열과 달리 여러가지 멤버함수와 알고리즘을 사용할 수 있는 장점도 있습니다.) 하지만 이러한 편리성을 지나치게 맹신한체 STL의 기본 동작들을 간과 한다면 불필요한 시간, 공간의 낭비를 초래하게됩니다. 이번장은 이러한 문제를 방지하기 위한 장입니다. 제목과 같이 "불필요한 재할당을 방지하기 위해 resever를 사용하자"입니다. STL은 기본적으로 할당된 공간이 가득차면 재할당에 있어 다음 전략을 취하고 있습니다. 1. container의 capacity가 모두 찬 상태에서 새로운 공간이 요구되면( 새로운 원소를..
이번편은 컨테이너의 종류에 따라 효과적으로 원소를 삭제하는 방법들을 소개합니다. 1. 특정 원소(값) 지우기. 하나의 원소를 지우려고 할땐 각 컨테이너마다 다음의 멤버함수를 이용하면 됩니다. Container c (1) contiguous memory container c가 vector, deque, string의 경우에는 멤버함수인 erase를 이용하면 됩니다. 단, erase의 경우 삭제할 위치인 iterator를 매개변수로 받으므로 algorithim의 함수인 remove를 이용하여 다음과 같이 사용합니다. c.erase( remove(c.begin(), c.end(), 1992)); range erase의 경우 erase함수의 두번째 매개변수에 end위치를 넘겨줍니다. 시간복잡도는 Linear o..
- Total
- Today
- Yesterday
- Algorithm
- C++
- Codejam
- python
- printf
- 악보
- 코드잼
- 정규표현식
- cpp
- link
- peram jam
- 알고리즘
- regex
- 피아노
- compile
- 중국여행
- 카카오 공채
- Spring
- 사천
- kernerl
- 이루마
- STL
- 문자열
- yiruma
- 드럼
- C language
- 여행
- linux
- 중국
- Pointer
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |