이 문제에 대해서, 많은 책들이 지적하고 있다. 가장 효과적인 해결책을 이 책에서도 설명하고 있는데, 우선 보도록 하자. 1 ) 다음 코드는 무엇인가? #include #include #include #include #include int main( void ) { std::deque coll1; std::copy(std::istream_iterator( std::cin ), std::istream_iterator(), std::back_inserter( coll1 ) ); std::cout
ECPPS 검색 결과
키워드에 대한 이야기다. 재미있는 것은 왜 이런 생각을 하냐는 것이다. 일반적으로 키워드야 컴파일러가 분석하는데, 사용하는 단어 쯤으로 생각 해도 무리가 없다. 뭐 더 있는가? 키워드 자체가 키워드일 뿐이다. 질문을 통해서 무엇을 생각해 봐야 할지 알아 보자. 1 ) 대부분의 프로그래밍 언어들이, 키워드들을 예약해 두고 프로그램의 식별자로는 사용하지 못하게 하는 이유는 무엇일까? 간단하다. 컴파일러의 파싱을 보다 빠르게, 보다 확실하게 하기 위해서이다. 만약 키워드를 함수나 변수로 쓰게 되면, 이 경우가 키워드인지, 함수인지, 변수인지를 판별하는 로직도 무수히 만들어야 할 것이다. C++의 키워드들 asm, auto, bool, break, case, catch, char, class, const, co..
항목 26 에서 체스의 플레이 데이터를 저장하는데, 각 바이트마다 쓸수 있는 것을 생각해 보았다. 그런데 이해가 되지 않는것이 마지막 12 비트를 기록하는 방법이다. 이번 항목은 그 방법들에 대해서 논하는 것이다. 최소한의 인터페이스는 다음과 같을 것이다. class BitBuffer { public: // p의 첫번째 비트로부터 num개의 비트들을 추가한다. void Append( unsigned char *p, size_t num ); // 실제로 쓰이는 비트 개수를 조회한다. size_t Size() const; // start 번째의 비트부터 num 개의 비트들을 얻고, // 그것들을 dst의 첫 번째 비트부터 저장한다. void Get( size_t start, size_t num, unsign..
1 ) 표준 컨테이너 deque, list, set, vector가 데이터를 적재하기 위해, 얼마나 추가비용을 부담해야 하는가? 참조 : http://ikpil.com/817 2 ) 월드와이드 체스 서버를 만들고, 각 경기의 플레이를 저장한다고 하자. 플레이어의 이름이나 기타 부수적인 것을 저장하는것이 아닌, "플레이 자체"를 저장하는 것에만 초점을 맞추고, 이 데이터를 저장하기 위해 얼만큼의 메모리가 필요 할까? 전제로 반수씩 기록한다. 플레이어 정보(이름, 승패 등...)는 제외시킨다. 1 바이트당 8비트로 한다. 체스판은 세로(row)8줄 : 1 ~ 8 가로(col) 8줄 : a ~ h 이다. 유닛은 킹,퀸,루크,비숍,나이트,폰, 이 있다. 플레이어는 두명이다. a. 반수 하나 당 128 바이트 이..
인라인을 완전 파해치는 항목이다. 1 ) 인라인화란 무엇인가? 함수를 코드로 직접 대체하는 행위, 라고 정리해도 될 듯 싶다. 이런 행위 때문에, 함수 호출 비용이 없어 진다. 참조 : http://ikpil.com/762 2 ) 인라인화는 언제 수행되는가? a. 코딩 시점에서? 코딩 시점에서, 프로그래머가 inline 을 지정해 주면서 수행 된다. 코딩 시점에서 inline 키워드를 집어 넣으려면, 세 가지 염두해야할 것이 있다. 첫째, .. 우선 하지 말아야 한다. 둘째, inline 키워드는 컴파일러의 허락을 받아야 한다. 셋째, 인라인화 발생지점을 예측하지 말아야 한다. 셋째 부연 설명 : 인라인화 자체는 함수가 아닌 함수 호출에 대해서 일어난다. 그래서 어떤 지점에서 인라인화 되고, 어떤 지점에..
최근댓글