이번편의 주제는 원소의 할당 전략입니다. 원소의 대입 혹은 할당전략은 여러가지가 있을 수 있습니다. 1. for문을 이용한 할당 (push_back, 혹은 공간을 할당받은 후 [], 반복자를 통한 할당) 2. algorithm function사용 copy, fill, replace등의 함수가 대표적인 함수들. 3. range member function( or range constructor) 사용. insert, assign함수나 range 생성자를 이용한 방법입니다. 1번의 경우에는 stl에 있어 권장되지 않는 방법입니다.for문으로 인해 함수의 호출횟수가 비효율적으로 증가하며 가독성도 떨어지기 때문입니다. 2번의 경우에는 코드가 간결해지고 가독성도 좋아지긴 하나 실제로는 반복문을 암시적으로 사용하고..
이번 주제는 컨테이너의 원소가 비어있는지 여부를 확인하기 위해 size()보다 empty()를 호출하라는 주제입니다. 하지만 결론부터 말씀드리면 c11에 와서는 성능상의 차이가 없게 되었습니다. 다만 코드에서 좀더 표현을 명료하기 위해 비어있는지 여부를 확인한다면 size()보다 empty가 좋을것입니다. (또한 size()==0)은 비교의 과정이 한번 더 들어가므로 이 보단 empty()로 한번에 해결함이 낫긴 할겁니다) 앞서 언급한바와 같이 현재는 size()가 상수시간입니다. http://www.cplusplus.com/reference/list/list/size/ 실제로 stl::list::size함수를 보면 다음과 같이 단순히 멤버변수를 반환하게 되어 있습니다. 하지만 splice를 함수의 헤더..
item3의 주제는 컨테이너의 객체(혹은 값)를 정확하고 낮은 비용으로 복사하기 입니다. STL을 사용하는데 있어 핵심으로 알아야할 사안은 값이 복사된다는 사실입니다. (Copy in, Copy out) 이는 다시말해 컨테이너에 존재하는 객체는 그 자체로 유일할 객체가 된다는 사실입니다. (primitive type은 값 그 자체가 복사 되는점에 있어서 예외) 가령 사용자가 만든 객체 Widget이 있다고 가정합니다. 또 각 객체를 생성해 vector에 push_back한다면 이 때 vector에 들어가는 객체는 복사대입연산이 수행되어 값이 복사되어 들어가게 됩니다. 이러한 개념은 algorithm에서 마찬가지로 작용합니다 sort, reverse, nth_elements와 같은 알고리즘에서 적용될 적에..
item2의 주제는 컨테이너의 사용에 있어 코드의 독립적일 수 있을 거라는 환상을 조심하라 입니다. 우선 모든 STL은 템플릿이 가능하도록 설계되어 있습니다. 다시말해 STL로부터 얻을 수 있는 pointer,iterator, function 역시 템플릿되어 사용이 가능합니다. 때문에 이를 기초로 클래스등을 설계하면서 사용하는 STL을 선택하는데 주의를 필요로 합니다. 가령 라이브러리를 만들고 나서 개발자들이 이를 사용한다고 가정합니다. 하지만 추후에 라이브러리를 수정하면서 내부에서 사용하는 STL을 vector에서 map으로 바꿉니다. 물론 인터페이스는 그대로 이기에 사용자가 라이브러리의 클래스를 사용하거나 함수를 호출하는데 변경은 없습니다. 하지만 내부의 자료구조가 위 처럼 sequence conta..
2017. 11. 4. 이루마 콘서트를 다녀왔습니다. 이루마의 곡들을 제대로 알고 듣기 시작한지도 4년이 다되갑니다. 그 전에는 BGM이나 방송에서 많이 쓰이는 곡들이라 익숙하지만 이루마라는 작곡가이자 피아니스트를 제대로 알지 못하였죠. 하지만 이루마의 곡들에 빠지게 된 이후로는 저에게 있어 이루마는 현재진행형입니다. 덕분에 어릴때 배우다 말았던 피아노의 혼(?)을 꺼내어 다시 연습하고 영상을 올리기에 이르렀죠. 요즘엔 회사일로 바빠서 연습을 예전만치 못하고 있지만 그래도 꾸준히 연습하여 영상을 올려보려 합니다. 피아노 공연으로나, 콘서트에서의 이루마로나 이번이 처음이였기에 기대가 컸습니다. 그리고 공연을 보고나니 역시 참 좋았습니다. 좋아하는 락/메탈 공연과는 또 다른 복잡다단한 점나의 감정을 느낄 수..
item1은 어떠한 상황에서 적절한 STL을 선택할것인가에 대한 주제입니다. 1. 임의의 위치에 삽입할 일이 잦다면( vector::insert() ) 순차 컨테이너를 선택한다. - 연관 컨테이너는 이러한 작업을 할 수 없다. 단, insert와 같은 작업은 많은 비용이 발생하므로 신중해야 한다. (insert가 발생하면 모든 원소들을 이동시켜야한다. ) 2. 컨테이너에서 순서가 중요하지 않다면 hashed 컨테이너를 사용한다. (c11에서는 unordered로 변경 됨) 3. c++표준에 꼭 맞춰야 한다면 hashed 컨테이너와 slit, boost::rope는 사용하지 않는다. 4. 원소의 이동이 잦다면 연관메모리 컨테이너는 피하자. (1번과 배치되는 내용이며 선택에 주의가 필요하다. 상황에 맞게 선..
지난 9월 16일, 드림씨어터 내한공연을 다녀왔습니다. 군인일때는 군인이여서 못갔는데 이번엔 기어코 보게되었습니다. (드러머로서 마이크 포트노이를 아주 좋아 하지만 탈퇴 후라 아쉽군요) 게으른탓에 이제서야 그 후기를 짤막하게 올립니다. 드림씨어터를 접한것은 고1때입니다. 당시엔 유명한 몇곡만 골라 듣는정도 였는데 입대전부터 슬슬 앨범단위로 듣기 시작하였고 드림씨어터는 저게에 있어 현재진행형입니다. 드림씨어터의 매력은 무엇보다도 음악적으로는 장엄한, 서사적이고 짜임새 있으며 악기에 있어서는 완벽함일것입니다. 사실 아무리 악기 실력이 좋다 한들 작곡, 구성등이 별로라면 아무 소용 없을것 입니다. 하지만 드림씨어터는 그렇지 않습니다. 탄탄한 실력을 기반으로 그 노래들에 있어서까지 완벽함을 갖추었으니 말이죠. ..
이번 2017 하반기 카카오 공채 코딩시험에서 나왔던 문제를 다시 정규표현식을 이용해 풀어보려합니다. 당시엔 정규표현식을 몰랐기에 문자열 처리에 애를 먹었는데 정말 간단해지네요. http://tech.kakao.com/2017/09/27/kakao-blind-recruitment-round-1/ 문제 설명과 해설은 위의 링크를 참고하세요. 1S2D*3T 를 문제에 맞게 분리하는게 관겁입니다. 문제에 따르면 위의 문자열은 1S , 2D*, 3T로 분리되어야 합니다. 언뜻 그냥 하드코딩으로 해도 금방할것같지만 문자열 처리가 생각보다 예외처리를 한다던지 조건이 많다보니 쉽지많은 않습니다. 정규표현식을 C++에서 이용하기 위해선 http://www.cplusplus.com/reference/regex/regex..
- Total
- Today
- Yesterday
- 정규표현식
- 알고리즘
- 사천
- peram jam
- STL
- 중국여행
- link
- 여행
- python
- kernerl
- yiruma
- 드럼
- 악보
- compile
- 중국
- Spring
- Algorithm
- Pointer
- C language
- printf
- regex
- linux
- 피아노
- Codejam
- 코드잼
- 이루마
- 문자열
- 카카오 공채
- cpp
- C++
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |