NC University37 4일차 - trivial trivial 일반적으로 클래스의 생성자(혹은 복사생성자, 소멸자)가 아무일도 하지 않으면, 이를 trivial하다고 한다. 그럼 '아무 일도 하지않는' 생성자는 정확히 어떤 것을 의미하는 것일까? C++에서는 명시적으로 생성자를 구현하지 않으면 컴파일러가 자동으로 생성자를 만들어준다. 개발자가 생성자를 명시적으로 작성하지 않았다는 것은 기본적으로 생성자에서는 별도의 일을 하지 않겠다는 의미를 담고 있으니, 디폴트 생성자는 trivial하지 않을까라는 생각을 가질 수 있다. 이를 확인하기 위해 아래의 코드를 살펴보자.class A {};class B : public A{public: virtual void foo () {}}; 위의 코드에서 클래스 B에는 생성자가 없다. 그러므로 컴파일러는 자동으로.. 2015. 7. 16. 3일차 - 반복자 카테고리 (iterator category) Intro 아래의 코드를 컴파일해보자.#include #include #include int main(int argc, char* argv[]){ std::list s(10, 3); std::sort(s.begin(), s.end()); return 0;} '일반화 함수'에서 언급했었던 것과 같이 sort는 STL의 algorithm 함수 중 하나이며, 컨테이너에 관계없이 내부 원소들을 정렬하는 것이 목적이다. 그러나 컴파일을 해보면 수십 줄의 에러 메시지들이 출력된다. 언뜻 복잡해 보이지만 쭉 훑어보면 반복적으로 등장하는 키워드가 두 개 있다. 첫번째는 'operator-'이고, 두번째는 '_RanIt'이다. find 함수를 컨테이너에 적용하려면 반복자의 ++, 역참조, != 연산이 필요했다. 이.. 2015. 7. 13. 3일차 - 반복자 (iterator) Intro 간단한 싱글 리스트의 구현을 생각해보자.template struct Node {public: Node(T a, Node* n) : data(a), next(n) {}private: T data; Node* next;};template class slist {public: slist() : head(nullptr) {} // Node의 생성자를 활용해서 list의 맨 앞에 새로운 Node를 추가 void push_front (const T& a) { head = new Node(a, head); }private: Node* head;}; 별로 특별한 것은 없다. 아래와 같이 값을 삽입하는 것만 가능한 단순한 리스트이다.slist s;s.push_front(10);s.push_front.. 2015. 7. 8. 3일차 - 일반화(generic) 함수 Intro 일반화(generic) 함수는 하나의 함수나 클래스를 최대한 다양하게 활용할 수 있게 만드는 것으로써, STL의 설계 철학 중 하나이다. 이번 글에서는 C언어에서 특정 타입에 대해 사용되는 함수를 일반화해가는 과정을 살펴보자.Step 1. C언어의 strchr() 함수#include using namespace std;char* xstrchr (char* s, char value) { while(*s != 0 && *s != value) ++s; return *s == 0 ? 0 : s;}int main(int argc, char* argv[]){ char s[] = "abcdefg"; char* p = xstrchr(s, 'c'); if (p == 0) cout 문자.. 2015. 7. 7. 이전 1 ··· 4 5 6 7 8 9 10 다음