Some Practices 6

Pair STL

서로 다른 2개의 연관된 데이터를 하나의 데이터로 묶어서 관리할 수 있게 해주는 STL.data1data2한 pair가 저렇게 생겼다.다양한 방면에서 사용할 수 있다. 대표적으론 다음과 같다.인덱스와 그 인덱스에 해당하는 데이터를 따로 저장해야 할 경우좌표를 저장해야 할 경우키 값과, 비교해야하는 값(우선순위가 있는 값) 쌍일 경우 등사용 방법헤더 파일라는 헤더 파일에 있는데, 사실 이 헤더 파일은 혹은, 에 포함되어 있다.#include #include #include 3 가지 헤더 파일 중 하나라도 있으면 사용이 가능하다.선언pair p;type1, type2에는 저장할 데이터의 자료형을 적어주면 된다.둘이 같아도 무방하다.메소드p는 pair 변수라 가정한다.p.first // 첫 번째 페이 데이..

Deque STL

덱 STL 사용법.사용 방법헤더 파일#include 선언deque variable_name;type에 원하는 타입 적고, 변수명을 적어주면 된다.메소드D는 deque 변수라 가정한다.D.push_front(data)D.push_back(data)D.size()D.empty()D.pop_front()D.pop_back()D.front()D.back()D.begin()D.end()D.clear()D.insert(address) // ex) D.insert(D.begin() + 1)D.erase(address) // ex) D.erase(D.begin() + 3)순회for(auto x : D) cout 특징앞, 뒤에서 삽입 및 삭제가 가능하다.맨 앞, 맨 뒤에서의 작업은 O(1)이다.원래는 안되지만 STL D..

Queue STL

리스트, 스택에 이어 큐도 STL에 당연히 있다.사용 방법헤더 파일#include 선언queue variable_name;type에 원하는 타입(int, char ...)을 적어주면 된다.메소드Q는 queue 변수라 가정한다.Q.push(data)Q.size()Q.empty()Q.pop()Q.front()Q.back()주의할 점: front와 back, pop은 비어있는데 사용하면 런타임 에러가 발생한다.특징back으로 삽입, front에서 제거가 이루어지고 시간복잡도는 O(1)이다. (FIFO)인덱스로 참조 불가능하다.

Stack STL

C++ STL에 구현되어 있는 stack ADT를 사용하는 방법을 알아보자.사용 방법선언stack variable_name;메소드stack S;S.push(10);S.push(11);...S.size() // return size of stackS.empty() // if stack is empty, return true (else false)S.pop() // delete top data at stackS.top() // just return top of stackS는 스택 변수, int 형 이라고 가정한다.S.push(data)S.size()S.empty()S.pop()S.top()주의할 점: pop과 top은 stack이 비어 있을 때 사용하면 런타임 에러!주의할 점2: pop은 삭제만 하고 값을 ..

List STL

C++의 STL에 당연하게도 linked list가 구현되어 있다.이 list는 doubly linked list로, 이중 연결 리스트이다.사용 방법선언int main(void) { list L = {1, 2}; // 1->2 list::iterator t = L.begin(); // t는 head 가리킴 auto t = L.begin(); // over C++ 11 ver.}기본적인 선언이다. 다만 헤드를 가리키는 변수를 만들 때,C++ 11 이상에서는 다음과 같은 형식이 가능하다.auto t = L.begin();메소드L은 list 변수라 가정한다.L.push_back(val)L.push_front(val)L.insert(addr, val) // addr 앞에 삽입한다L.erase(a..

실수 자료형의 주의점

IEEE-754 formatsign -> 부호exponent -> 지수(과학적 표기법)fraction -> 유효숫자이렇게 저장됨으로써 생기는 문제점들을 기억해야 한다.1. 실수의 저장/연산 과정에서 반드시 오차가 생긴다.다음 예시를 보자.if(0.1+0.1+0.1 == 0.3) printf("true\n");else printf("false\n");결과는 놀랍게도 false가 출력된다.0.1과 0.3은 둘 다 무한소수이고 0.1+0.1+0.1 을 하면서 오차가 커지게 되어 둘이 다르다고 나오게 된다.하지만 오차 범위는 알 수 있고. (float은 $10^{-6}$, double은 $10^{-15}$)double의 오차 허용 범위가 훨씬 크기에, 실수 자료형은 double을 쓴다.(메모리가 모자랄 경우에는..