본문 바로가기

C130

시퀀스 컨테이너 - vector, list, deque 일단 vector와 deque는 동적 배열, list는 링크드 리스트 구조 라고 보면 될듯 하다. vector는 stack구조, deque는 queue구조 라고 볼 수 있는데. 둘다 동적 배열의 기능으로써 데이터를 삽입하는 것에는 큰 차이가 없다. vector는 뒤에서 부터, deque는 앞, 뒤 양쪽에서 삽입이 가능하다. vector의 사용법. 다음은 deque의 사용법. list는 [] 참조가 불가능하고 나머지는 비슷하다. list를 참조하기 위해서는 반복자가 필요 하다. 일단 개념만 파악하기 위해 간단한 예제를 보자. 소스를 보면 데이터를 참조해서 출력하는것이 아닌, 단순히 최상위 데이터만 확인, 데이터를 하나씩 pop하고 있다. 일단 저런식으로 사용한다는 것만 파악해 두자. 2010. 4. 5.
용어적 설명. 컨테이너 : 임의 타입 원소 집합. 동적 배열이나 링크드 리스트 처럼 구현이 되어있다. 반복자 : 원소 집합을 순회 하기 위해 사용 어떠한 컨테이너라도 공통 인터페이서 제공 컬렉션 클래스와 별개로 독립적으로 작동 포인터와 유사, ++연산, *연산이 가능 알고리즘 : 원소들의 처리를 위해 사용 모든 컨테이너에 공통적으로 적용 공통적으로 하나만 사용 유연성이 강하고, 사용자에 맞는 알고리즘 구현 가능 2010. 4. 5.
데코레이터(Decorator) 패턴 특정 객체의 기능을 동적으로 추가하거나, 삭제 할 때 편리하게 사용 할 수 있는 패턴이다. 유용한 상황 : 다른 객체에 영향을 주지 않으면서 새로운 기능을 추가 하고자 할 때, 특시 Client 측에서는 이렇게 새로운 기능이 추가된 객체와 그렇지 않은 객체를 따로 구분하고 싶지 않을 때 특정 객체에 동적으로 추가된 기능을 삭제하고 싶을 때. 단, 이 경우 추가된 기능에 해당하는 객체가 아닌 원래 객체가 가진 기능은 삭제할 수 없다. 클래스 상속을 통한 기능 확장이 불가능하거나 어려울 때, 예를 들어 서로 독립된 상속 관계가 많아 이들을 조합하면, 너무 많은 하위 클래스가 만들어질 우려가 있는 경우 또는 클래스 정의가 숨겨져 있어 상속이 불가능할 때. 예제는 기본 베이스 커피에 토핑을 추가 한다고 하였을 .. 2010. 4. 4.
2가지 변수를 저장하는 pair 음, 특별히 어려운것은 없다. 하나의 변수형(2가지를 저장하는)이라고 보면 쉽게 이해가 가능, #include #include #include // pair 사용시 필요한 해더 // pair 선언 std::pair Max(std::pair pair1, std::pair pair2) { return pair1 > pair2 ? pair1 : pair2; } std::pair Sum(std::pairpair1, std::pairpair2) { // 임시 객체 생성과 비슷하다. // 만든 후 바로 소멸, .. 2010. 4. 4.
예외 처리(try, catch, throw) 코드에서 예외 처리를 하는 방법은 많이 존재한다. 주로 조건문을 사용해서 예외 처리를 하게 되지만, C++에서 예외 처리 메커니즘인 try, catch, throw문에 대해서 살펴 보도록 하자. 순서는 try안에서 throw를 해주면 catch에서 예외를 처리 한다고 보면 된다. 예제는 다음과 같다. #include int divide( int a, int b ); void main() { int a, b; std::cout a >> b; try { // 예외가 발생하면, if( b == 0 ) throw b;// throw로 넘겨주면, std::cout 2010. 4. 4.
템플릿(template) 변수 형에 대해서 오버로딩을 해서 여러가지 기능을 수행하는 함수를 중복정의를 할 수 있다. 하지만 그것 보다 더 좋은것이 존재 하니, 그것은 템플릿, 개념 자체는 어렵지 않다. 예제를 보자. #include // 최소 클래스 템플릿 선언 template class Data { T2 name; T1 rank; public: Data( T1 a, T2 b ); ~Data(); }; // 외부에서 선언 하는 방법 template Data::Data( T1 a, T2 b ) { name = new char[strlen(b)+1]; strcpy( name, b ); rank = a; } // 소멸자. template Data::~Data() { std::cout 2010. 4. 4.