[C++プログラミングとSTL]アルゴリズム


これは本書C++プログラミングとSTLの第15部の要約です。

目次


1.アルゴリズムの概念


2.アルゴリズムの使用例

  • find
  • copy
  • sort
  • reverse
  • random_shuffle
  • 1.アルゴリズムの概念

  • アルゴリズムの関数はすべて一般的であるため、特定のコンテナに属するのではなく、すべてのコンテナで
  • を使用することができる.
    したがって、アルゴリズム関数は、特定のコンテナのメンバー関数ではなく、通常のグローバル関数によって記述されるである.
  • アルゴリズムは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;
    
    }