효율적인 재사용은 훌륭한 소프트웨어 엔지니어링의 중요한 부분이다. 직접 작헝한 것들 대신에 표준 라이브러리 알고리즘을 사용하는게 얼마나 더 많은 이득을 얻을수 있는지 설명한다. (마이어스씨가 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 ) { // 망..
분류 전체보기 검색 결과
불필요하거나 임시로 사용되는 개체들은 작업을 매우 어렵게 만들거나(임시 개체에 작업할수 있다는 위험성) 성능을 떨어뜨리는 주요 요인이다.(불필요한 복사 생성자 호출로 인한 오버헤드) 이런것들이 어떤 것들이 있는지 알아보자 예제 코드~ #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의 매개변수로써만 사용되기 때문에, 컴파일러 단계에서 최적화 시켜, 복사 생성자 호출을 제거 할수 있다. 그러..
최근댓글