MoniWiki메모장_STL
Login:
Password:
대문|찾기|바뀐글|목록|메모장|책갈피|연꽃|링크
Edit Diff Reload Search Print Info Mail Help RSS

@ 2005-04-26 @

  STL (Standard Template Library, 표준 템플릿 라이브러리)

참고서적;
▷ C++ Standard Library 튜토리얼·레퍼런스/ 니콜라이 M.조슈티스 저/ 문정환, 김희준 공역/ 2003/ 인포북

0-1.일반화 프로그래밍의 목적은 데이터형과 무관한 코드를 작성하는 것으로 알고리즘에 중점을 둔다.
배열, 연결 목록 또는 다른 컨테이너형에 작용하는 단일 검색 함수를 확보하는 것이다.
즉, 함수는 컨테이너에 저장된 데이터 형뿐만 아니라 컨테이너 자체의 데이터 구조체에도
구속되지 않아야 한다.
-2.객체 지향 프로그래밍은 프로그래밍의 데이터 측면을 중시한다.

1-1.STL의 기본 개념은 데이터와 동작을 구분하는 것에 있다.
데이터는 컨데이너 클래스에 의해서 관리되며, 동작은 수정 가능한 알고리즘에 의해서 정의된다. 반복자는 이 두 컴포넌트를 연결시키는 역할을 한다. 이것은 모든 알고리즘이 모든 종류의 컨테이너와 상호 작용하는 것을 가능하게 한다.
-2.STL은 각 부분이 조화되도록 설계된 라이브러리이며,
STL은 구성 요소는 도구이지만 다른 도구를 구성하는 기본 요소이기도 하다.
STL을 이해하는 열쇠는 반복자(포인터를 일반화한 것)를 이해하는 것으로,
STL함수는 반복자와 반복자 범위를 다룬다.
STL은 다섯 가지 반복자를 정의하는데 필요한 반복자 종류에 따라 그 알고리즘을 묘사한다.
다섯 가지 알고리즘은 입력 반복자, 출력 반복자, 정방향 반복자, 양방향 반복자,
임의 접근 반복자이다.

2-1.다중 범위 처리
다중 범위를 사용하는 알고리즘을 사용할 경우, 사용자는 두 번째로 제공하는 범위가 적어도 첫 번째로 제공되는 범위보다 커야 한다는 사실을 보장해야만 한다.
-2.에러 핸들링
STL 디자인의 목표는 안정성보다는 최고의 성능에 있다. 에러 검사는 시간의 소비하기 때문에 STL에서는 대부분 이루어지지 않는다.
...특히, STL을 사용하고자 할 경우는 다음과 같은 요구사항을 지켜야만 한다.
◆ 반복자는 반드시 유효해야만 한다.
◆ 종료 위치 다음을 가리키는 반복자는 참조하는 원소가 없다.
◆ 범위는 반드시 유효해야만 한다.
-3.예외처리
소멸자에서 예외를 던지지 않는다는 것을 바탕으로 하고 있다는 것이다.
-4.NULL 타입의 혼란함 때문에 C++에서 NULL을 사용하는 것을 권장하지 않는다. 대신 '0'이나 NIL 같은 특별한 사용자 정의 상수가 더 나을 수 있다.

표준 STL 시퀀스(sequence) 컨테이너 #

0.vector, list, deque, string,

1-1.vector 템플릿 클래스 ; 전산 분야에서 벡터라는 용어는 배열을 의미
끝에서만 고정 시간 삽입과 삭제를 제공하고 그 외에서는 선형 시간 삽입과 삭제 기능을 제공하며,
vector 클래스는 더욱 편리한 인터페이스와 안정성으로 동적 배열의 모든 기능을 제공한다.
-2.vector의 능력
사용자가 vector 안의 포인터나 레퍼런스, 반복자를 관리하거나 또는 속도가 목표라면 용량을 먼저 확보하는 것이 중요하다.
재할당을 피하기 위해서는 reserve()를 사용하면 된다. 이 함수는 사용자가 원하는 만큼의 용량을 확보해 준다.
-3.기존의 배열처럼 vector를 사용하기
첫 번째 원소의 주소 대신 반복자를 전달해서는 안된다는 것이다. vector의 반복자는 구현에 따라 정의되는 타입이기 때문에, 이것은 기존의 포인터와 완전히 다른 것이다.

2-1.list 템플릿 클래스 ; 이중 연결 목록을 대표
목록의 어떤 위치에서도 원소의 고정 시간 삽입과 삭제를 제공하며,
vertor와 달리 배열 표기와 임의 접근을 지원하지 않는다.
-2.Vector 객체를 사용하여 범위를 제공하고 set 객체를 사용하여 셀 단위의 목록을 제공할 수 있다.

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; // 허용되지 않음(암시적 변환)
pd = auto_ptr<double>(p_reg); // 허용됨(명시적 변환)
auto_ptr<double> pauto = pd; // 허용되지 않음(암시적 변환)
auto_ptr<double> pauto(pd); // 호용됨(암시적 변환)


{_r} 메모장으로 가기

April, 2025
 12345
6789101112
13141516171819
20212223242526
27282930 

"Say it, don't spray it!"

책갈피
MoniWiki/HotKeys
바람_gems_cs_Item_Upgrade
책갈피_재미이론
last modified 2005-05-04 13:05:33
고치기|찾기|쪽 지우기|비슷한 쪽 Valid XHTML 1.0! Valid CSS! powerd by MoniWiki
0.0179 sec