본문 바로가기

Programming Study

STL 컴포넌트 개요 STL에는 여섯 가지의 주요 컴포넌트 즉, 컨테이너(container), 제네릭 알고리즘(generic algorithm), 반복자(iterator), 함수 객체(function object), 어댑터(adaptor), 할당기(allocator)가 포함되어 있다. 1. 컨테이너(container) 객체들의 컬렉션(collection)을 저장하고 있는 객체를 STL에서는 컨테이너(container)라고 부른다. STL에는 두 가지 종류의 컨테이너가 있는데, 하나는 시퀀스 컨테이너(sequence container)이고, 다른 하나는 정렬 연관 컨테이너(sorted associative container)이다. 1-1 시퀀스 컨테이너(sequence container) 시퀀스 컨테이너는 타입이 동일한 객체들.. 더보기
소개 표준 템플릿 라이브러리(STL)에서는 다양한 종류의 C++ 컨네이너 클래스와 알고리즘이 제공된다. 이들을 서로 적절히 조합하여 사용하면, 여러 방면에 걸쳐 유용한 기능들을 수행해 낼 수 있도록 설계되어 있다. 비록 제공되는 컨테이너 클래스의 개수가 그다지 많은 편은 아니지만, 벡터, 리스트, 셋, 맵 등과 같이 자주 사용되는 컨테이너들은 거의 대부분 포함되어 있다. 템플렛 알고리즘 컴포넌트에는 가장 흔한 데이터 조작에 해당되는 검색, 정렬, 머지 등을 위한 알고리즘들이 다양하게 포함되어 있다. STL이 다른 C++ 컴테이너 클래스 라이브러리와 구분되는 가장 큰 차이점은 바로 STL 알고리즘은 모두 제네릭하다는 것이다. 즉, STL의 알고리즘은 내장 타입과 다양한 컨테이너 상에서 모두 수행이 가능하며, 심.. 더보기
C++의 형 변환 연산자 1. C++에서의 형 변환 연산 C++ 진영에서는 C 스타일의 형 변환 연산자를 가리켜 '오래된 C 스타일 형 변환 연산자(Old C-style cast operator)'라 부르기도 한다. 이렇듯 C 스타일의 형 변환 연산자는 C언어와의 호환성을 위해서 존재할 뿐, C++에서는 새로운 형 변환 연산자와 규칙을 제공하고 있다. C++에서는 다음과 같이 총 4개의 연산자를 추가로 제공하면서 용도에 맞는 형 변환 연산자의 사용을 유도하고 있다. - static_cast - const_cast - dynamic_cast - reinterpret_cast 위의 형 변환 연산자들을 사용하면 프로그래머는 자신이 의도한 바를 명확히 표시할 수 있다. 따라서 컴파일러도 프로그래머의 실수를 지적해 줄 수 있고, 코드를 .. 더보기
STL에 들어가기에 앞서 STL(Standard Template Library) - 표준 템플릿 라이브러리 - 다양한 제네릭 알고리즘과 데이터 구조로 구성된 범용 라이브러리 STL은 다음 네 가지의 기본적인 아이디어를 바탕으로 설계되었다. - 제네릭 프로그래밍(generic programming) - 효율성(efficiency)의 저하가 없는 추상화(abstraction) - Von Neumann 계산 모델 - 값 개념(value semantic) 제네릭 프로그래밍 제너릭 프로그래밍은 C++이나 템플릿과는 아무런 관련이 없으며, 여러 유용한 소프트웨어 컴포넌트들을 체계적으로 엮어내는 방법을 연구하는 학문이다. 제네릭 프로그래밍의 목적은 알고리즘, 데이터구조, 메모리 할당 메커니즘, 그리고 기타 여러 소프트웨어적인 장치들을 발전시.. 더보기
예외처리(Exception Handling) 1. 예외상황과 예외처리의 이해 예외처리에서의 '예외'는 프로그램 실행 도중에 발생하는 '예외적인 상황'을 의미한다. 그리고 C++은 이러한 예외적인 상황의 처리를 위한 문법을 별도로 제공하고 있다. 예외상황을 처리하지 않았을 때의 결과 C++에서 말하는 '예외(Exception)'는 프로그램의 실행 도중에 발생하는 문제상황을 의미한다. 따라서 컴파일 시 발생하는 문법적인 에러는 예외의 범주에 포함되지 않는다. '예외'라는 것은 문법적인 오류가 아닌, 프로그램의 논리에 맞지 않는 상황을 의미한다. 예제를 통해 알아보자. #include using namespace std; int main(void) { int num1, num2; coutnum1>>num2; cout 더보기
템플릿_2 1. 템플릿_1 내용의 확장 Point 클래스 템플릿과 배열 클래스 템플릿 앞에서 우리는 Point 클래스를 다음의 형태로 템플릿화 하였다. template class Point { private: T xpos, ypos; public: Point(T x=0, T y=0); void ShowPosition() const; }; 그리고 다음의 형태로 BoundCheckArray 클래스 템플릿을 정의하였다. template class BoundCheckArray { private: T * arr; int arrlen; BoundCheckArray(const BoundCheckArray& arr){ } BoundCheckArray& operator=(const BoundCheckArray& arr) { } p.. 더보기
템플릿_1 1. 템플릿(Template)에 대한 이해와 함수 템플릿 템플릿에는 '모형자'라는 뜻이 담겨 있다. 함수를 대상으로 템플릿 이해하기 '함수 템플릿'은 함수를 만들어 낸다. 함수의 기능은 결정되어 있지만, 자료형은 결정되어 있지 않아서 결정해야 한다. 예를 통해 살펴보자 int Add(int num1, int num2) { return num1+num2; } T Add(T num1, T num2) { return num1+num2; } - 함수의 기능 덧셈 - 대상 자료형 int형 데이터 - 함수의 기능 덧셈 - 대상 자료형 결정되어 있지 않음 위를 살펴보면 int형 선언을 T로 대신 했음을 알 수 있는데, 이는 자료형을 결정짓지 않은, 그래서 나중에 T를 대신해서 실제 자료형을 결정하겠다는 뜻이다. 그런.. 더보기
String 클래스의 디자인 1. C++의 표준과 표준 string 클래스 표준 string 클래스 C++ 표준 라이브러리에는 string이라는 이름의 클래스가 정의되어 있다. 클래스의 이름이 의미하는 것처럼, 문자열의 처리를 목적으로 정의된 클래스이며, 이 클래스의 사용을 위해서는 헤더파일 을 포함해야 한다. 다음은 string 클래스의 사용 예제이다. #include #include using namespace std; int main(void) { string str1 = "I like "; string str2 = "string class"; string str3 = str1 + str2; cout 더보기
연산자 오버로딩_2 1. 반드시 해야 하는 대입 연산자의 오버로딩 대입 연산자의 오버로딩은 그 성격이 복사 생성자와 매우 유사하다. 객체간 대입연산의 비밀: 디폴트 대입 연산자 잠시 복사 생성자에 대해서 복습해보자. 다음은 이전에 설명한 복사 생성자의 대표적인 특성이다. - 정의하지 않으면 디폴트 복사 생성자가 삽입된다. - 디폴트 복사 생성자는 멤버 대 멤버의 복사(얕은 복사)를 진행한다. - 생성자 내에서 동적할당을 한다면, 그리고 깊은 복사가 필요하다면 직접 정의해야 한다. 그리고 다음은 대입 연산자의 대표적인 특성이다. - 정의하지 않으면 디폴트 대입 연산자가 삽입된다. - 디폴트 대입 연산자는 멤버 대 멤버의 복사(얕은 복사)를 진행한다. - 연산자 내에서 동적 할당을 한다면, 그리고 깊은 복사가 필요하다면 직접 .. 더보기
연산자 오버로딩_1 1. 연산자 오버로딩의 이해와 유형 함수가 오버로딩 되면, 오버로딩 된 수만큼 다양한 기능을 제공하게 된다. 즉, 이름은 하나이지만 기능은(기능을 제공하는 함수는) 여러 가지가 되는 셈이다. 마찬가지로 연산자의 오버로딩을 통해서, 기존에 존재하던 연산자의 기본 기능 이외에 다른 기능을 추가할 수 있다. 연산자를 오버로딩 하는 두 가지 방법 연산자를 오버로딩 하는 방법에는 다음 두 가지가 있다. - 멤버함수에 의한 연산자 오버로딩 - 전역함수에 의한 연산자 오버로딩 동일한 자료형을 대상으로 + 연산자를 전역함수 기반으로, 그리고 멤버함수 기반으로 동시에 오버로딩 할 경우, 멤버함수 기반으로 오버로딩 된 함수가 전역함수 기반으로 오버로딩 된 함수보다 우선시 되어 호출된다. 오버로딩이 불가능한 연산자의 종류 .. 더보기