본문 바로가기
IT 컴퓨터_프로그램 /c++

STL 기초 학습

by 건축직일상 2015. 10. 20.

STL - Standard Template Library


C++ 에서 제공해주는 라이브러리이고 광범위 하게 많이 쓰인다

프로그램에 필요한 자료구조나 알고리즘을 제공해준다


자료유형에 관계없이 일반화된 프로그래밍 환경을 제공해주는 Genric Programming 이다


STL - 컨테이너 , 인터레이터(반복자) , 함수객체, 알고리즘 (모두 템플릿으로 되어있다)


1. 컨테이너 - 객체를 저장하는 객체 (컬렉션, 자료구조)


//시간복잡도 - 어떤함수의 증가양상을 다른함수와의 비교로 표현하는 수론과 해석학의 방법

알고리즘의 복잡도를 단순화 할때와 무한급수의 뒷부분을 관략화 할때 사용한다

big O 표기법, 란다우 표기법 으로 사용한다 


//완벽하지 않을수느 있다 최적화 하는 경우에 내가 만들수도 있을것이다


2. 이터레이터 - 포인터와 비슷한 아이

컨테이너 원소에 접근하여 원소를 가리킬수 있다 / STL 의 핵심

컨테이너마다 내부구조가 다른데 그 컨테이너를 순회하는 방법을 일반화 시키기 위해 사용한다

컨테이너 요소 한개를 가리키는 역활을 수행하고 

요소를 읽고 쓰고 연산자 오버로딩 되어있어서 ++ -- 같은 기능들이 가능하다 

결국 획일화 된 순회 방법을 제공한다 


3. 알고리즘 - 정렬 , 삭제, 검색, 연산, 등을 해결하는 일반화된 방법을 제공해주는 함수 템플릿이다

대부분 전역함수로 작성되어있다 

일반화된 환경을 제공하기위해서 객체 지향적으로 코드가 작성하지않았다

캡슐화도 거의 되어있지 않다

우리가 쓰는 대부분 알고리즘들은 <algorithm.h> 에 들어있다 


4. 함수객체 , (Functor, 함수자 ) - 함수처럼 작동하는 객체

operator() 연산자를 오버로딩한 객체 

함수의 형태를 가진 객체 이기때문에 멤버변수와 멤버함수를 가질수있다 

//생성자 소멸자 가지는것이 가능하다

일반함수 보다 속도가 빠름 , 컴파일러에서 인라인화 시키기 때문에 컴파일러가 최적화 하기 쉽다 한다


//////////////////////////////////

Auto_ptr 

boost C++ 11버전 의 shared_ptr 

스마트포인터 같은거

lambda ? 같은거 공부좀 해보자


///////////////////////////



STL 의 특징 

1. 효율성 

2. 일반화 프로그래밍(재사용성)

3. 확장성( 표준이기때문에 이식성이 확보된다) 컴파일러 호환성이 좋다

4. 컴파일 타임에 타입이 정해져있다 

5. 템플릿 기반이기때문에 사용시에 코드가 인스턴스화 된다.


//하지만 요즘 컴들이 워낙 좋기 때문에 딱히 문제가 덜하다고한다 


1. 표준 시퀀스 컨테이너 

Vector , list , deque 

컨테이너 원소가 자기자신만의 삽입위치(순서) 를 가진다 .. 선형적인 자료구조이다


vector - 이거는 동적배열 컨테이너를 제공하는 클래스 템플릿 이다

원소에 대한 임의 접근이 가능하다 (배열인덱스 접근)

원소를 맨앞에 추가할수 없으며 

임의의 위치에서 삽입 / 삭제가 일어날때 임의의 위치로 부터 

뒤에 저장된 원소개수만큼에 비례하는 시간이 소요된다. 

맨끝에서의 삭제를 제외한 삽입/ 삭제 동작에서 모든  itrtator 가 무효화된다


중간 삽입 삭제 시에 속도가 느리다 

재할당이 일어날때 속도 저하가 있을수있다 

재할당이 되는 크기의 증가율은 컴파일러 버전마다 다를수 있다 

벡터의 있는 요소를 모두 지워도 할당된 공간을 지우지 않는다 

동적배열 재할당과 같다 


2. 표준 연관 컨테이너

//map , set, multimap, multiset - 저장원소가 삽입순서와는 상관없이 

특정 정렬 기준에 따라서 자동으로 정렬되는 컨테이너 이다 


3, 어댑터 컨테이너 

기존 컨테이너의 기능중에 일부만을 사용하도록 제한을 걸어둔

컨테이너, 큐, 스택, 우선순위 큐 


스트링은 근사컨테이너라고 하는데 뭐 그냥 그럼 어짜피 스트링 안쓸거임 


'IT 컴퓨터_프로그램 > c++' 카테고리의 다른 글

STL Vector 기초  (0) 2015.10.20
메크로함수  (0) 2015.10.18
템플릿  (0) 2015.10.18
연산자 오버로딩  (0) 2015.10.18
오버라이딩_virtual2  (0) 2015.10.13

댓글