[C++ 프로그래밍과 STL] 알고리즘
책 C++ 프로그래밍과 STL의 Chapter 15를 요약한 내용입니다.
목차
1. 알고리즘의 개념
2. 알고리즘의 사용 예제
- find
- copy
- sort
- reverse
- random_shuffle
1. 알고리즘의 개념
- 알고리즘에 속한 함수는 모두 일반적(Generic)이기 때문에, 특정 컨테이너에 종속된 것이 아니라 모든 컨테이너에서 사용할 수 있다
- 그래서 알고리즘 함수들은 특정 컨테이너의 멤버함수가 아닌 일반 전역함수로 작성 되어 있다
- 알고리즘은 총 4가지로 구성
- 변경 불가 순차 알고리즘
- 변경 가능 순차 알고리즘
- 정렬 관련 알고리즘
- 범용 수치 알고리즘
2. 알고리즘 사용 예제
1. find
함수 원형
template<class InputIterator, class T>
InputIterator find
{
InputIterator first,
InputIterator last,
const T& value
}
사용 예제
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
void main()
{
int arr[] = { 10, 20, 30, 40, 50 };
vector<int> vec1(&arr[0], &arr[5]);
if (find(vec1.begin(), vec1.end(), 30) != vec1.end())
{
cout << "검색 성공" << endl;
}
else
{
cout << "검색 실패" << endl;
}
}
2. copy
- 특정 컨테이너의 범위 값을 대상이 되는 컨테이너에 복사하는 함수
함수 원형
template <class InputIterator, class OutputIterator>
OutputIterator copy
{
InputIterator first,
InputIterator last,
OutputIterator result;
}
사용 예제
#include <iostream>
#include <deque>
#include <vector>
#include <algorithm>
using namespace std;
void main()
{
int arr[] = {30, 20, 50, 60, 80, 10, 70};
vector<int> vec1(&arr[0], &arr[7]);
deque<int> dq;
deque<int>::iterator it;
copy(vec1.begin(), vec1.end(), back_inserter(dq));
for (it = dq.begin(); it!= dq.end(); it++)
{
cout << *it << " ";
}
cout << endl;
}
3. sort
- 컨테이너에 저장된 데이터들을 정렬
- 오름차순 정렬
함수 원형
template <class RandomAccessIterator, class Compare>
void sort
{
RandomAccessIterator first,
RandomAccessIterator last
}
사용 예제
#include <iostream>
#include <deque>
#include <algorithm>
using namespace std;
void main()
{
int arr[] = {30, 20, 50, 60, 80, 10, 70};
deque<int> dq;
for (int i = 0; i < sizeof(arr) / sizeof(arr[0]); i++)
{
dq.push_back(arr[i]);
}
deque<int>::iterator it;
sort(dq.begin(), dq.end());
for (it = dq.begin(); it != dq.end(); it++)
{
cout << *it << endl;
}
}
4. reverse
- 지정한 구간의 요소들의 순서를 반대로 뒤집음
함수 원형
template <class BidirectionalIterator>
void reverse
{
BidirectionalIterator first,
BidirectionalIterator last
}
사용 예제
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
void main()
{
int arr[] = {30, 20, 50, 60, 80, 10, 70};
vector<int> vec1(&arr[0], &arr[7]);
vector<int>::iterator it;
cout << "reverse 전 : ";
for (it = vec1.begin(); it != vec1.end(); it++)
cout << *it << " ";
cout << endl;
reverse(vec1.begin(), vec1.end());
cout << "reverse 후 : ";
for (it = vec1.begin(); it != vec1.end(); it++)
cout << *it << " ";
cout << endl;
}
5. random_shuffle
- 컨테이너에 저장된 데이터들을 랜덤하게 재배치
함수 원형
template <class RandomAccessIterator>
void random_shuffle
{
RandomAccessIterator first,
RandomAccessIterator last
}
사용 예제
#include <iostream>
#include <deque>
#include <algorithm>
using namespace std;
void main()
{
int arr[] = {30, 20, 50, 60, 80, 10, 70};
deque<int> dq;
for (int i = 0; i < sizeof(arr) / sizeof(arr[0]); i++)
{
dq.push_back(arr[i]);
}
deque<int>::iterator it;
for (it = dq.begin(); it != dq.end(); it++)
cout << *it << " ";
cout << endl;
random_shuffle(dq.begin(), dq.end());
for (it = dq.begin(); it != dq.end(); it++)
cout << *it << " ";
cout << endl;
}
Author And Source
이 문제에 관하여([C++ 프로그래밍과 STL] 알고리즘), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@mokhwasomssi/C-프로그래밍과-STL-알고리즘저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)