플랫폼/C++ 5

공백을 포함해 한 줄 입력받기

일반적으로, standard input에서 입력 받는 경우는 scanf와 cin만으로 충분하다고 생각했으나, 문제를 몇 개 풀면서 그게 아니라는 것을 알았다. 문자열이 공백을 포함하거나, 한 줄을 통째로 입력받는데 그것을 scanf 문 하나로 커버할 수 없는 경우 어려움이 생긴다. 공백을 포함하여 한 줄을 통째로 입력받아야 하는 경우, 그리고 그 크기도 짐작하기 어려운 경우에, 다음과 같이 받으면 된다. string s; getline(cin, s); 이렇게 하면, 공백을 포함한 문자열이 통째로 s 안으로 들어온다. ( cin >> s 로는 불가능한 것.) 이 s를 가지고 stringstream 등으로 지지고 볶아서 각 원소를 분리해내면 된다. _________________________________..

플랫폼/C++ 2013.07.09

Reverse_iterator 에 대해서

1. reverse_iterator를 만드는 방법 (constructor) (http://www.cplusplus.com/reference/iterator/reverse_iterator/reverse_iterator/) 다음과 같이 사용한다. ex1) vector::reverse_iterator riter1(iterator iter) // iterator를 사용해서 reverse_iterator 만들기 - 이 때 생성되는 reverse_iterator는, 생성에 사용된 iterator가 가리키는 원소의 바로 이전 원소를 가리킨다. 아래의 코드를 보면 쉽게 알 수 있다. (출처 : 위의 URL) // reverse_iterator example #include // std::cout #include // ..

플랫폼/C++ 2013.05.31

lower_bound와 upper_bound

둘 다 ForwardIterator, 즉 증가 연산 (++) 이 되는 iterator를 가진 컨테이너에 대해 동작한다. 즉, vector, set, multiset, map, multimap ... 등에서 동작한다. * lower_bound는, 첫 원소의 iterator에서 시작하여 iterator을 ++증가시키며 탐색하다가, '비교 결과 주어진 값보다 먼저 나오지 않는(not compare less than) 첫 원소'의 iterator를 반환한다. * upper_bound는, 첫 원소의 iterator에서 시작하여 iterator을 ++증가시키며 탐색하는 것은 동일하나, '비교 결과 주어진 값보다 나중에 나오는(compare greater than) 첫 원소'의 iterator를 반환한다. 두 개가 ..

플랫폼/C++ 2013.05.30

pair의 크기 비교 방식

같은 종류의 두 pair의 크기 비교는, "사전순 (lexicographical order)" 으로 이루어진다. 무슨 말이냐면, first의 element를 먼저 비교하고, 만일 거기서 판가름이 나지 않는 경우에는 second를 비교하여 크기를 정하게 된다. 정확한 크기 비교의 정의는 http://stackoverflow.com/questions/2819245/is-stdpairint-stdstring-ordering-well-defined 위의 정의에 따르면, pair y 가 x 보다 크다는 것은 case 1. y의 first가 x의 first보다 큰 경우이거나, case 2. case 1이 만족되지 않았을 때(short-circuit), x의 first가 y의 first보다 크지 않으면서, y의 se..

플랫폼/C++ 2013.05.29