참고서적;
▷ C++ Standard Library 튜토리얼·레퍼런스/ 니콜라이 M.조슈티스 저/ 문정환, 김희준 공역/ 2003/ 인포북
0-1.일반화 프로그래밍의 목적은 데이터형과 무관한 코드를 작성하는 것으로 알고리즘에 중점을 둔다.
배열, 연결 목록 또는 다른 컨테이너형에 작용하는 단일 검색 함수를 확보하는 것이다.
-2.객체 지향 프로그래밍은 프로그래밍의 데이터 측면을 중시한다. 즉, 함수는 컨테이너에 저장된 데이터 형뿐만 아니라 컨테이너 자체의 데이터 구조체에도 구속되지 않아야 한다.
1-1.STL의 기본 개념은 데이터와 동작을 구분하는 것에 있다.
데이터는 컨데이너 클래스에 의해서 관리되며, 동작은 수정 가능한 알고리즘에 의해서 정의된다. 반복자는 이 두 컴포넌트를 연결시키는 역할을 한다. 이것은 모든 알고리즘이 모든 종류의 컨테이너와 상호 작용하는 것을 가능하게 한다.
-2.STL은 각 부분이 조화되도록 설계된 라이브러리이며,
STL은 구성 요소는 도구이지만 다른 도구를 구성하는 기본 요소이기도 하다.
2-1.다중 범위 처리STL을 이해하는 열쇠는 반복자(포인터를 일반화한 것)를 이해하는 것으로, STL함수는 반복자와 반복자 범위를 다룬다. STL은 다섯 가지 반복자를 정의하는데 필요한 반복자 종류에 따라 그 알고리즘을 묘사한다. 다섯 가지 알고리즘은 입력 반복자, 출력 반복자, 정방향 반복자, 양방향 반복자, 임의 접근 반복자이다.
다중 범위를 사용하는 알고리즘을 사용할 경우, 사용자는 두 번째로 제공하는 범위가 적어도 첫 번째로 제공되는 범위보다 커야 한다는 사실을 보장해야만 한다.
-2.에러 핸들링
STL 디자인의 목표는 안정성보다는 최고의 성능에 있다. 에러 검사는 시간의 소비하기 때문에 STL에서는 대부분 이루어지지 않는다.
-3.예외처리...특히, STL을 사용하고자 할 경우는 다음과 같은 요구사항을 지켜야만 한다. ◆ 반복자는 반드시 유효해야만 한다. ◆ 종료 위치 다음을 가리키는 반복자는 참조하는 원소가 없다. ◆ 범위는 반드시 유효해야만 한다.
소멸자에서 예외를 던지지 않는다는 것을 바탕으로 하고 있다는 것이다.
-4.NULL 타입의 혼란함 때문에 C++에서 NULL을 사용하는 것을 권장하지 않는다. 대신 '0'이나 NIL 같은 특별한 사용자 정의 상수가 더 나을 수 있다.표준 STL 시퀀스(sequence) 컨테이너 #0.vector, list, deque, string,
1-1.vector 템플릿 클래스 ; 전산 분야에서 벡터라는 용어는 배열을 의미
끝에서만 고정 시간 삽입과 삭제를 제공하고 그 외에서는 선형 시간 삽입과 삭제 기능을 제공하며,
-2.vector의 능력vector 클래스는 더욱 편리한 인터페이스와 안정성으로 동적 배열의 모든 기능을 제공한다.
사용자가 vector 안의 포인터나 레퍼런스, 반복자를 관리하거나 또는 속도가 목표라면 용량을 먼저 확보하는 것이 중요하다.
-3.기존의 배열처럼 vector를 사용하기재할당을 피하기 위해서는 reserve()를 사용하면 된다. 이 함수는 사용자가 원하는 만큼의 용량을 확보해 준다.
첫 번째 원소의 주소 대신 반복자를 전달해서는 안된다는 것이다. vector의 반복자는 구현에 따라 정의되는 타입이기 때문에, 이것은 기존의 포인터와 완전히 다른 것이다.
2-1.list 템플릿 클래스 ; 이중 연결 목록을 대표
목록의 어떤 위치에서도 원소의 고정 시간 삽입과 삭제를 제공하며,
-2.Vector 객체를 사용하여 범위를 제공하고 set 객체를 사용하여 셀 단위의 목록을 제공할 수 있다.vertor와 달리 배열 표기와 임의 접근을 지원하지 않는다.
3-1.deque 템플릿 클래스
-2.deque의 동작은 다음과 같은 경우에는 vector와 다르다.
1)deque는 용량에 관한 함수들을 제공하지 않는다.(capacity()와 reserve())
2)deque는 앞부분과 끝부분에 직접적으로 원소를 추가, 삭제할 수 있는 함수를 제공한다.(push_front()와 pop_front()) 표준 STL 연관(assosiative) 컨테이너 #0.set, multiset, map, multimap
0-1.연관 컨테이너의 자동 정렬의 가장 큰 장점; 원소들을 검색할 경우에 좋은 성능을 발휘
연관 컨테이너는 일반적으로 바이너리 트리(binary tree)처럼 구현되어 있다. 그러므로 모든 원소(모든 노드)들은 하나의 부모(parent)와 두 개의 자식(children)을 가진다.
auto_ptr #0.책에 있는 내용이라 참고만 할 것!*.auto_ptr은 자신이 가리키는 객체에 대한 소유자로서 행동하는 포인터이다.
결과적으로, auto_ptr이 파괴된다면 소유하고 있던 객체도 자동으로 파괴되는 것이다. new로 할당된 메모리를 관리하기 쉽게 해준다.
#include "memory.h" void demo1 { double * pd = new double; // 동적할당(new에 의해 할당된 메모리에만 사용) '* pd = 25.5; delete pd; // 메모리 해제 return; } void demo2 { auto_ptr<double> ap (new double); '* ap = 25.5; return; // 메모리 자동해제 }auto_ptr은 new/ delete와 짝을 이룸
auto_ptr<double> pd;
double * p_reg = new double;
pd = p_reg; // 허용되지 않음(암시적 변환)
auto_ptr<double> pauto = pd; // 허용되지 않음(암시적 변환)pd = auto_ptr<double>(p_reg); // 허용됨(명시적 변환) auto_ptr<double> pauto(pd); // 호용됨(암시적 변환) |
"Say it, don't spray it!" 책갈피 MoniWiki/HotKeys 바람_gems_cs_Item_Upgrade 책갈피_재미이론 |