효율적인 재사용은 훌륭한 소프트웨어 엔지니어링의 중요한 부분이다. 직접 작헝한 것들 대신에 표준 라이브러리 알고리즘을 사용하는게 얼마나 더 많은 이득을 얻을수 있는지 설명한다. (마이어스씨가 Effective STL 에서 알고리즘의 우수성에 대해서 아주 잘 말씀해 주신게 있다. 물론 곽용재님께서 번역을 이해하기 쉽게 해주셔서 이해하기가 쉬웠다. ^^) 항목 6 의 코드를 다시 가져 온다. std::string FindAddr( std::list emps, std::string name ) { for( std::list::iterator i = emps.begin(); i != emps.end(); i++ ) { // 이것 때문에 operator== 이 필요하다. if( *i == name ) { // 망..
Exceptional C++ 검색 결과
불필요하거나 임시로 사용되는 개체들은 작업을 매우 어렵게 만들거나(임시 개체에 작업할수 있다는 위험성) 성능을 떨어뜨리는 주요 요인이다.(불필요한 복사 생성자 호출로 인한 오버헤드) 이런것들이 어떤 것들이 있는지 알아보자 예제 코드~ #include #include /* 아마도 이런 녀석이 있어야 겠다. operator== 도 만들어야겠고 말이다. 왜 addr을 public 으로 했는지는 스스로 판단 하길..*/ class Employee { public: bool operator==( const std::string& rhs ) const { return addr == rhs; } public: std::string addr; }; // 이건 내가봐도 촤악의 함수다. std::string FindAdd..
진행 노트는 책을 보도록 하고, 다음은 항목 4의 해결책으로 제시된 클래스이다. template class fixed_vector { public: typedef T* iterator; typedef const T* const_iterator; iterator begin( ) { return v_; } iterator end( ) { return v_+ size; } const_iterator begin( ) const { return v_; } const_iterator end( ) const { return v_ + size; } // 기본생성자 fixed_vector() { } // 복사 생성자 template fixed_vector( const fixed_vector& other ) { std::..
본 내용은 "Exceptional C++ : C++ 프로그래머를 자극하는 47개의 재미있는 퍼즐·문제" 책에서 문제만 발취한것임을 미리 밝힙니다. 난이도 8 이다. 와우~ 제목 그대로 이런 컨테이너를 만들어 보라는 의도~ 힌트로는 클라이언트 코드에서는 어떻게 사용할지를 생각해 보면 된다고 한다. 문제 1. 어떻게 하면 다음과 같은 고정 길이 벡터(vector) 클래스의 복사 생성자와 복사 할당자를 가장 잘 구현할 수 있을까? 어떻게 하면 생성자와 할당자를 최대로 사용 할 수 있을까? 주의점 : 절대로 다른 것들을 고쳐서는 안된다. 오직 복사 생성자와 복사 할당자만을 구현하는것이다. 또한 STL 호환이 아니다! template class fixed_vector { public: typedef T* iter..
다음 코드의 흐름제어(Control Flow)에 관련되어서 나올수 있는 많은 문제를 찾아보고, 어떻게 고쳐야 되는지 생각해 보자. #include #include #include #include using namespace std; /* 다음 라인은 다른 헤더 파일로부터 나온 것임*/ char* intoa( int value, char* workArea, int radix ); extern int fileIdCounter; /* 클래스가 변하지 않는가에 대한 검사를 자동으로 하는 보조 함수 */ template inline void AAssert( T& p ) { static int localFileId = ++fileIdCounter; if( !p.Invariant() ) { cerr
포워딩 함수가 무엇이며, 어떻게 효율적으로 구사할수 있는지에 대해서 이야기이다. 포워딩 함수란, 다른 개체나 함수등으로 일을 떠넘기는 함수를 뜻하며, 개념적으로 switch 함수라고 보면 될 것이다. 포워딩 함수의 예 bool f( X x ) { return g( x ); } 문제 : 어떻게 하면 효율적으로 바꿀 수 있을까? ... .. . 1. 값을 매개변수로 넘기는 대신 const&를 매개변수로 넘기자. 이렇게 되면 불필요한 복사생성자 호출이 없어 지므로, 효율적으로 포워딩 함수를 구성 할 수가 있다. 여기에 대해서 몇가지 부수적으로 이야기가 붙여지는데, x는 f() 에서 사용되어지지 않고 g의 매개변수로써만 사용되기 때문에, 컴파일러 단계에서 최적화 시켜, 복사 생성자 호출을 제거 할수 있다. 그러..
최근댓글