[C++ 프로그래밍과 STL] 알고리즘

26950 단어 CC

C++ 프로그래밍과 STL의 Chapter 15를 요약한 내용입니다.

목차

1. 알고리즘의 개념

2. 알고리즘의 사용 예제

    1. find
    1. copy
    1. sort
    1. reverse
    1. 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;

}

좋은 웹페이지 즐겨찾기