본문 바로가기

C,C++/C++51

[C++ STL] 라이브러리 알고리즘의 반복자 인자가 마지막 요소의 다음을 참조하는 이유 라이브러리에서 알고리즘의 범위를 지정하기 위해 2개의 반복자를 지정한다. 하나는 첫 요소를 참조하기 위한 반복자와, 나머지는 마지막 요소의 다음을 참조하는 반복자이다. 컨테이너는 아래와 같은 위치를 참조하는 반복자를 반환하는 멤버 함수를 가지고 있다. 왜 마지막 요소를 참조하지 않고 마지막 요소의 다음을 참조하는 반복자를 사용할까? 이에는 크게 3가지 이유가 있다. 첫 번째 만약 마지막 요소의 다음이 아닌 마지막 요소를 참조한다면 요소가 없는 컨테이너의 범위, 즉 크기가 0인 범위를 나타낼 경우 요소가 존재하지 않기 때문에 다른 무언가의 방법으로 표현해야 한다. 이는 크기가 0인 컨테이너의 범위와 크기가 1 이상인 컨테이너의 범위를 나타낼 때의 방법이 다르게 되어 혼동을 줄 수 있고 신뢰하기 어렵게 된다.. 2019. 11. 25.
[C++ STL] <algorithm> std::remove_if 함수 안녕하세요. 오늘은 헤더의 std::remove_if() 함수에 대해 알아보겠습니다. template ForwardIterator remove_if (ForwardIterator first, ForwardIterator last, UnaryPredicate pred); remove_if 함수는 Input 컨테이너의 [first, last) 범위의 요소들 중 서술 함수인 pred를 만족하지 않는 요소를 Input 컨테이너의 처음부터 차례로 덮어씌웁니다(복사). first, last Input 컨테이너의 범위로 주어진 반복자입니다. [first1, last1) 범위의 컨테이너에서 요소를 탐색합니다. pred 단항 연산을 하는 서술 함수로서 Input 컨테이너의 요소들 중 해당 함수를 만족하지 않을 때 복사합.. 2019. 11. 8.
[C++ STL] <algorithm> std::search() 함수 안녕하세요. 오늘은 헤더의 std::search() 함수에 대해 알아보겠습니다. template ForwardIterator1 search (ForwardIterator1 first1, ForwardIterator1 last1, ForwardIterator2 first2, ForwardIterator2 last2); search 함수는 [first1, last1) 범위의 요소들 중 [first2, last2) 범위의 요소들과 순차적으로 모두 일치하는 요소들을 찾아 해당 요소의 시작 지점을 가리키는 반복자를 반환합니다. 예를 들어 "hello world"에서 "world" 를 포함하는 첫 위치를 알고 싶을 때 사용할 수 있습니다. "world"가 존재한다면 첫 문자인 'w'를 가리키는 반복자를 반환합니다... 2019. 11. 7.
[C++ STL] 특정 값 제외 컨테이너 복사 std::remove_copy() 함수 안녕하세요. 오늘은 헤더의 std::remove_copy() 함수에 대해 알아보겠습니다. remove_copy 함수는 std::copy 함수와 유사한 동작을 하는 함수입니다. 4번째 인자를 추가로 받는 것을 제외하면 copy 함수와 동일한 동작을 합니다. template OutputIterator remove_copy (InputIterator first, InputIterator last, OutputIterator result, const T& val); remove_copy 함수는 [first, last) 범위의 요소들 중 val과 같은 요소를 제외하고 result 위치에 순차적으로 복사합니다. first, last [first, last) 범위의 컨테이너의 요소들을 복사합니다. result 복사한.. 2019. 11. 6.
[C++] std::transform() 함수 및 back_inserter 함수에 대해 알아보자 안녕하세요. 오늘은 헤더에 정의되어 있는 STL 알고리즘인 std::transform() 함수에 대해 알아보겠습니다. transform() 함수는 3개의 반복자와 1개의 단항 연산 함수를 매개변수로 갖습니다. ( 바이너리 연산 함수를 인자로 갖기도 하지만 여기선 단항 연산 함수만 다루겠습니다. ) template OutputIt transform( InputIt first1, InputIt last1, OutputIt d_first, UnaryOperation unary_op ); : transform() 함수는 [first1, last1) 범위의 각 요소마다 함수를 호출하고 그 결과를 d_first 위치에.. 2019. 11. 4.
[C++] std::equal 함수로 간단하게 회문 판별 함수 구현해보기 / palindrome 안녕하세요. 오늘은 C++ 라이브러리 함수를 이용해 간단하게 단어의 회문 여부를 판별하는 함수를 작성해보겠습니다. 회문(Palindrome)이란? 'civic', 'eye', 'level', 'madam', 'rotor' 와 같이 거꾸로 읽어도 철자가 같은 단어를 말합니다. 헤더의 std::equal 함수와 멤버 함수인 std::string::rbegin 함수를 사용합니다. bool is_palindrome(const std::string& s) { return std::equal(s.begin(), s.end(), s.rbegin()); } equal 함수는 2개의 대상을 비교하여 참 또는 거짓을 반환합니다. 비교 대상은 [ s.begin(), s.end() ) 범위의 대상1과 s.rbegin()으로 .. 2019. 11. 2.