수업기록

STL

STL_Algorithm

#include<algorithm> 알고리즘은 전역 함수의 형태로 제공되어지는 함수 템플릿임. 오늘은 3~4개만 배우고 더 필요하면 MSDN에서 찾아볼 것.

  • [*] sort : 정렬 알고리즘 sort() : 매개 변수 3개를 요구함 (begin, end, 조건자) 원하는 범위 내에서 조건자를 통해서 정렬 진행. (조건자 삽입하지 않을 경우 오름차) (퀵 정렬 기반으로 구성되어 있는데, 여러 정렬도 함께 구현되어 있음)

  • [*] count_if : 조건자 참의 개수를 반환함. int iCount = count_if(vec.begin(), vec.end(), 조건자);

  • [*] for_each : 컨테이너의 모든 요소에 대해 주어진 함수(조건자)를 “적용”하는 반복문 for_each(vec.begin(), vec.end(), Safe_Delete); 벡터 안에 모든 원소를 딜리트하는 것. (즉 위와 다르게 bool타입이 아닐 수 있음.)

  • [*] find_if : 조건자에 해당하는 원소를 찾는 알고리즘 반환타입이 iterator임. vector<int>::Iterator iter=find_if(vec.begin(), vec.end(), 조건자) 찾는 원소가 없을 경우, end 이터레이터를 반환한다.

함수 객체와 람다와 유용하게 섞어서 사용할 수 있게 됨.

#include<functional> : c++언어 에서 제공하는 조건자 모음

List

리스트는 양방향(혹은 단방향) 연결 구조체다. 노드 >노드 >노드 와 같은 형태.

#include <list>
 
list<int> intlist;
 
intlist.push_back(19);
intlist.pop_back();
 
intlist.push_front(19);
intlist.pop_front();
 
for(list<int>::iterator iter; iter != intlist.end(); ++iter){
	*iter; //로 순회
}

멤버함수로 sort가 존재함 (디폴트 오름차 순/ 조건자 삽입 가능)

intlist.sort(greater<int>());

원소들의 순서를 역순으로 바꾸는 함수.

intlist.reverse();

값이 일치하는 원소를 “모두” 삭제하는 함수

intlist.remove(1);
intlist.remove_if(조건자); // 조건자에 해당하는 원소를 삭제하는 함수

특정 리스트를 오려넣기 하는 함수.

intlist.splice(이터레이터, 삽입할리스트);

(intlist의 iterator 위치에, 2번째 매개인자에 오려넣기 하는 함수임. 원본은 삭제되는 것. )

Listforward_list 추가됨


array

기존에 사용하던 정적 배열을 객체화 시킴 그래서 생성자/소멸자/복사생성자/대입연산자를 지원함.

int iArray[5] = {1,2,3,4,5}; //기존
array<int,5> arrEx = {10,20,30,40,50}; //STL

굳이 쓰는 이유는 멤버 함수들을 지원하니까 (size(), empty(), swap() 혹은 대입 연산자) 단, 삽입 삭제 계열의 함수들은 존재하지 않는다.

과거 포인터에 배열의 이름을 넣는 것처럼 활용하는 방법

int * ptr = arrEx.data();

배열의 모든 원소를 매개 변수로 채우는 함수

arrEx.fill(999);

deque Deque 별거 없음 벡터보다 8배 정도의 크기를 가지고 있음. 속도를 위해 메모리를 희생하는 방식.