본문 바로가기

[ C/ C++ 프로그래밍 ]/[ STL ]

[ 혼연 정리 ] STL 알고리즘 - 9 [ 수치 알고리즘 ] ㅇ 수치 알고리즘 - STL에 직접 소속되지 않으며 C++ 라이브러리로 분류된다. - 수치 알고리즘도 STL 컨테이너와 함께 동작한다. - numeric 헤더 파일에 정의되어 있다. ㅇ 누적합을 구하는 함수 T accumulate(InIt first, InIt last, T val [, BinOp op]); OutIt partial_sum (InIt first, InIt last, OutIt result [ ,BinOp op]); - accumulate 함수 : first ~ last 구간에 속한 값들의 총합 , 세번째 인수 val은 누적 총합의 초기값인데 0으로 지정하면 순수한 합을 구할 수 있다. - partial_sum 함수 : first ~ last까지의 부분합들을 구해 result 반복자 위치에.. 더보기
[ 혼연 정리 ] STL 알고리즘 - 8 [ 정렬 알고리즘 ] ㅇ 정렬 알고리즘 - 모든 정렬 함수들은 임의 접근 반복자를 요구하므로 임의 접근이 가능한 컨테이너에서 사용가능 - 별도의 조건자가 지정되 않을 경우 < 연산자가 요소의 대소를 비교 ㅇ sort() void sort (RanIt first, RanIt last [, BinPred F]); - 가장 기본적인 정렬 함수 - first ~ last 구간을 조전자의 비교 결과대로 정렬 ㅇ stable_sort() void stable_sort (RanIt first, RanIt last [, BinPred F]); - 같은 값의 상대적인 순서가 정렬 후에도 유지되는 안정적인 정렬을 수행 - 안정성이 없는 sort보다 조금 더 느리다. ㅇ partial_sort() void partial_sort (RanIt f.. 더보기
[ 혼연 정리 ] STL 알고리즘 - 7 [ 변경 알고리즘 ] ◎ 요소 변경 ㅇ fransform() - 함수 객체를 적용한 후 그 결과를 다른 구간에 복사한다. - 단항 함수를 취하는 버젼과 이항 함수를 취하는 버젼 두가지가 있다. OutIt transform(InIt first, InIt last, OutIt result, UniOp op); OutIt transform(InIt1 first1, InIt1 last1, InIt2 first2, OutIt result, BinOp op); - 단항 함수 : 반복자 구간의 요소를 이 함수로 넘겨 리턴된 값을 result 반복자 위치에 대입한다. - 이항 함수 : 두 반복자 구간의 대응되는 값을 함수로 념겨 리턴되는 값을 result 반복자 위치에 대입한다. - 처리한 결과는 result로 출력하기 때문에 원본이 그래.. 더보기
[ 혼연 정리 ] STL 알고리즘 - 6 [ 변경 알고리즘 ] ㅇ 요소 재배치 - 요소 재배치 함수들은 구간의 요소들을 특정한 다른 값으로 바꾸거나 요소끼리 교환함으로써 위치를 변경한다. ㅇ replace() void replace (FwdIt first, FwdIt last, const Type& Old, const Type& New); - first ~ last 사이의 Old 값을 찾아 new로 대처한다. - replace_if : 특정값이 아닌 특정 조건을 만족하는 값을 다른 값으로 변경 - replace_copy : 복사버젼 - replace_copy_if : 조건자를 취하는 복사함수 ㅇ reverse() void reverse(BiIt first, BiIt last); - 구간의 모든 요소의 순서를 반대로 뒤집는다 - reverse_copy : 복사 함수 .. 더보기
[ 혼연 정리 ] STL 알고리즘 - 5 [ 변경 알고리즘 ] ㅇ 요소 제거 - 요소를 제거하는 함수는 조건에 맞는 요소를 찾아 제거하는 시늉을 한다. - 실제로 요소를 제거하지는 못한다. ==> 일반성을 가진 알고리즘이 조작할 권한이 없기 때문 ㅇ remove(), removeif FwdIt remove(FwdIt first, FwdIt last, const Type& val); FwdIt remove_if(FwdIt first, FwdIt last, UniPred F); OutIt remove_copy(FwdIt first, FwdIt last, OutIt result, const Type& val); OutIt remove_copy_if(FwdIt first, FwdIt last, OutIt result, UniPred F); - remove 함수는 작업 대상.. 더보기
[ 혼연 정리 ] STL 알고리즘 - 4 [ 변경 알고리즘 ] ㅇ 요소 생성 - 새로운 요소를 만들어 지정한 위치에 대입하는 함수 - 컨테이너에 삽입하는 것이 아니라 기존 요소를 파괴하고 대입한다 void fill(FwdIt first, FwdIt last, const T& val); void fill_n(OutIt first, Size n, const T& val - fiil : 반복자 구간을 지정한다. 구간은 이미 메모리가 확보되어 있어야 한다. - fill_n : 시작 위치와 개수를 지정한다. 삽입 반복자 사용가능 1 #include 2 #include 3 #include 4 5 using namespace std; 6 7 template 8 void dump(const char *desc, C c) 9 { 10 cout.width(12);cout 더보기
[ 혼연 정리 ] STL 알고리즘 - 3 [ 변경 알고리즘 ] ㅇ 변경 알고리즘 - 컨테이너의 요소를 바꿀 수 있다. - 요소의 값만 변경, 컨테이너 자체에 대해서 어떠한 조작도 하지 못한다 - 요소를 제거하거나 새로운 요소를 삽입한다거나 크기 변경 불가능 ※ 알고리즘이 컨테이너에 접근하는 유일한 방법은 반복자를 통하는 것 뿐이며 반복자는 컨테이너의 요소를 엑서스하는 일반화된 방법을 제공할 뿐이지 컨테이너 자체를 엑세스 하는 것이 아니다. 알고리즘이 일반성을 획득할 수 있는 이유는 반복자를 통해서만 컨테이너의 요소를 엑세스하므로 컨테이너의 구조를 몰라도 약속된 방법(주로 연산자)만으로도 하고 싶은 동작을 다 할 수 있기 때문이다. 알고리즘은 자신이 액세스하는 컨테이너가 어떤 구조를 가지고 있는지 상관하지 않으며 내부적인 구조에 상관없이 실행된다. 심지어 어떤 컨테이.. 더보기
[ 혼연 정리 ] STL 알고리즘 - 2 [ 읽기 알고리즘 ] ◎ search에 관련된 알고리즘 ㅇ 반복자 구간에서 다른 구간 전체가 발견되는 지점을 검색 - first1 ~ last1 전체 구간에서 first2 ~ last2구간과 일치하는 패턴을 찾아 그 반복자를 리턴한다. FwdIt1 search(FwdIt1 first1, FwdIt1 last1, FwdIt2 first2, FwdIt2 last2 [, BinPred F]); FwdIt1 find_end(FwdIt1 first1, FwdIt1 last1, FwdIt2 first2, FwdIt2 last2 [,BinPred F]); FwdIt1 search_n (FwdIt1 first1, FwdIt1 last1, Size count, const Type& val[, BinPred F]); - search : 전체 .. 더보기
[ 혼연 정리 ] STL 알고리즘 - 1 [ 읽기 알고리즘 ] - STL 라이브러리는 객체 지향 기법의 일부 기능만 사용한다. - 상속은 거의 사용하지 않으며 다형성은 느리다는 이유로 완전히 배제한다. - 컨테이너 클래스는 내부적인 관리에 반드시 필요한 기능만을 가지며 필요한 모든 기능을 완벽하게 캡슐화하지 않는다. - 컨테이너들은 알고리즘을 제공하는 전역 함수와 결합되어야 제 기능을 발휘할 수 있다. - 알고리즘은 기능에 따라 읽기, 변경, 정렬, 수치 4가지로 크게 분류된다. ㅇ 읽기 알고리즘 - 컨테이너를 변경하지 않으며 컨테이너로부터 원하는 정보를 구하기만 하는 알고리즘 ㅇ find - 가장 기본적인 알고리즘인 검색 기능을 제공 InIt find(InIt first, InIt last, const T& val); - 입력반복자 두개로 검색 대상을 지정, 세번.. 더보기
[ 혼연 정리 ] 연관 컨테이너 - 9 [ 컨테이너 어댑터 ] ㅇ 큐 - FIFO 구조 - 자료를 관리하는 기본적인 기능은 시퀸스의 것을 그대로 재사용할수있다. - FIFO 원리대로 동작하기 위해 꼭 필요한 인터페이스는 4가지만 있다. push, pop : 앞뒤에서 값을 추가하거나 제거한다. front, back : 앞뒤의 값을 읽는다. - 앞의 4개의 주요 함수와 size, empty 그리고 생성자가 큐의 함수 전부이다. - 스텍과 만찬가지로 pop은 값을 제거하기만 하면 리턴하지 않으므로 front, back으로 값을 따로 읽어야 한다. - 큐의 템플릿 선언 다음과 같다. 1 template 2 class queue { ... } 3 4 #include 5 #include 6 7 using namespace std; 8 9 void main() 10 { 11 q.. 더보기