STL(一般的に巡回、検索アルゴリズム)

10199 ワード

4.2アルゴリズムの概要
アルゴリズムは主にヘッダファイルから構成されています.
すべてのSTLヘッダの中で最大の機能です.ここでよく使われている機能は比較、交換、検索、遍歴、コピー、修正、反転、並べ替え、マージなど…
体積はとても小さくて、いくつかのシーケンスの容器の上で行う簡単な運算のテンプレート関数だけを含みます.
関数オブジェクトを宣言するためのテンプレートクラスを指定します.
4.3一般的な巡回アルゴリズム
/*    アルゴリズムを巡回してコンテナ要素を巡回します.    @param begスタート    @param end終了    @パラムcalback  関数のコールバックまたは関数オブジェクト    @return関数オブジェクト*/for_each(iterator beg、iteratonid、calback);    トランスフォームアルゴリズムは指定容器の区間要素を別の容器に運搬します.    注意:transformは目標容器にメモリを割り当てませんので、メモリを事前に割り当てておく必要があります.    @param beg 1ソース容器からローズマリーを開始します.    @param end 1ソース容器終了ディショナー    @param beg 2ターゲット容器からローズマリーを開始します.    @パラムcakbackコールバック関数または関数オブジェクト    @returnはターゲットコンテナのディレクタ*/tranformに戻ります.(iterator beg 1、iteraton end 1、iterator beg 2、_calbakc)
 
 
for_each:
/*  template inline void for ueach(_InIt_First,_InIt_Last,_Fn 1_Fun){    for(;u First!=u Last;+u First)        _Funnc(*`First);  */ //一般関数void print 01(int val){    cout<///関数オブジェクトstruct print 001{    void operator()(int val){        cout<>;    } };  //for ueachアルゴリズムの基本的な使い方void test 01(){        vectorv;    for(int i=0;i<10;i+){        v.pusic(i)    }      //アルゴリズムを巡回    for ueach(v.begin()、v.end()、print 01)    cout<>;        mCount++;    }     int mCount;;; //フォーメーション戻り値void test 02(){      vectorv;    for(int i=0;i<10;i+){        v.pusic(i)    }       print 02 p=for ueach(v.begin()、v.end()、print 02()    cout<  struct print 03:public binary ufunction<int,int,void>{    void operator(int val,int bindParam)const{        cout<<"";    } };  //フォーマルバインディングパラメータ出力void test 03()        vectorv;    for(int i=0;i<10;i+){        v.pusic(i)    }       for yuach(v.begin()、v.end()、bind 2 nd(print 03(100)));
 
 
transform:
//transform別の容器に一つの容器の値を運ぶ/*    template inline    _OutIt_Trans form(_InIt_First、_InIt_Last、_OutIt_Dest、_Fn 1_Fun)    {             for(;u First!=u Last;+u First、+u Dest)            *_Dest=_Fun(*_First)        return(_Dest)    }       template inline    _OutIt_Trans form(_InIt 1_First 1,_InIt 1_Last 1,_InIt 2_First 2,_OutIt_Dest,_Fn 2_Fun)    {           for(;u First 1!=u Last 1;+u First 1,+u First 2,+u Dest)            *_Dest=_Fun(*_First1、*_First2)        return(_Dest)    } */  struct transformTest 01{    int operator()(int val){        return val+100    } }; struct print 01{    void operator()(int val){        cout<>;    } }; void test 01(){      vectorvSource;    for(int i=0;i<10;i+){        vSource.pusic(i+1)    }      //ターゲットコンテナ    vectorvTarget;   //vTargetに空間を開く    vTarget.resize;   //vSourceの要素をvTargetに運搬します.    vector:iterator it=tranform(vSource.begin()、vSource.end()、vTarget.begin()、tranformTest 01();   //印刷    forquah(vTarget.begin()、vTarget.end()、print 01();cout<vSource 1;    vector<int>vSource 2;    for(int i=0;i<10;i+){        vSource 1.pusic(i+1)    }      //ターゲットコンテナ    vectorvTarget;   //vTargetに空間を開く    vTarget.resize;    transform(vSource 1.begin()、vSource 1.end()、vSource 2.begin()、vTarget.begin()、tranformTest 02();   //印刷    forquah(vTarget.begin()、vTarget.end()、print 01();cout<
   15通常はアルゴリズムを巡回します.     フォーマット 戻り値があります     パラメータをバインドして出力できます.     トランスフォームは容器中のデータを別の容器に運びます.     注意:目標容器は空間を開拓する必要があります.     
#include 
#include 
#include 
#include  //bind2nd
using namespace std;
/*
               
    @param beg      
    @param end      
    @param _callback            
    @return     
*/
void myPr(int v){
    cout<v;
    for(int i=0;i<10;i++){
        v.push_back(i);
    }
    for_each(v.begin(),v.end(),myPr);
    cout<v;
        for(int i=0;i<10;i++){
            v.push_back(i);
        }
    myPr03 print2=for_each(v.begin(),v.end(),myPr03());
    cout<{
public:
    void operator()(int v , int start ) const {
        cout<v;
    for(int i=0;i<10;i++){
        v.push_back(i);
    }
    for_each(v.begin(),v.end(),bind2nd(myPr04(),1000));

}



/*
    transform                    
       : transform            ,             
    @param beg1         
    @param end1         
    @param beg2          
    @param _cakkback           
    @return          
*/
//transform(iterator beg1, iterator end1, iterator beg2, _callbakc)

//         
class TransForm{
public:
    int operator()(int val){
        return val+10;//       ,        ,              
    }
};



void test04(){
    vectorv;//     
    for(int i=0;i<10;i++){
        v.push_back(i);
    }


  vectorvTarget;//    
  //  ;      
  vTarget.resize(v.size());
  transform(v.begin(),v.end(),vTarget.begin(),TransForm());
  for_each(vTarget.begin(),vTarget.end(),[](int val){cout<v1;
    vectorv2;
    for(int i=0;i<10;i++){
        v1.push_back(100+i);
        v2.push_back(200+i);
    }

    vectorvTarget;//    
   vTarget.resize(v1.size());//v1 v2   
    transform(v1.begin(),v1.end(),v2.begin(),vTarget.begin(),TransForm2());
   for_each(vTarget.begin(),vTarget.end(),[](int val){cout<
 
 
 
 
4.4通常の検索アルゴリズム
/*    findアルゴリズムは要素を検索します.    @param beg容器開始    @param end容器終了    @param value検索の要素    @returnは検索要素の位置*/findを返します.    finduuifアルゴリズム条件検索    @param beg容器開始    @param end容器終了    @パラム  calbackコールバック関数または述語(bookタイプの関数オブジェクトを返します)    @return book検索はtrueに戻ります.そうでないとfalse*/finduif(iterator beg、iterator end、calback) /*     adjacent_ufindアルゴリズムは隣接重複要素を検索する.    @param beg容器開始    @param end容器終了    @パラム  _calbackコールバック関数または述語(bookタイプの関数オブジェクトを返します)    @returnは、隣接する要素の最初の位置にあるローズマリー*/adjacent_beg、iterator end、calbackを返します.    binary_searchアルゴリズム二点検索法    注意:無秩序シーケンスでは使用できません.    @param beg容器開始    @param end容器終了    @param value検索の要素    @return book検索はtrueに戻ります.さもなければfalse*/book binary(usearch)/*    countアルゴリズム統計要素の出現回数    @param beg容器開始    @param end容器終了    @パラム  valueコールバック関数または述語(bookタイプの関数オブジェクトを返します)    @return intは元素の個数*/countを返します.    countアルゴリズム統計要素の出現回数    @param beg容器開始    @param end容器終了    @パラム  calbackコールバック関数または述語(bookタイプの関数オブジェクトを返します)    @return intは元素の個数*/count uuifを返します.
 
      16一般的な検索アルゴリズム   find  値で検索   Person   finduuifは条件によってPerson*を検索します.    adjacent_ufindアルゴリズムは、隣接する重複要素を検索して、最初の重複要素のサブエージェント位置を返す.    binary_searchアルゴリズムの2つのコンテナを検索するには順序が必要です.    count    count_if 
#include 
#include 
#include 
#include 
#include 
using namespace std;
/*
    find       
    @param beg        
    @param end        
    @param value      
    @return          
*/

void test01(){
    vectorv;
    for(int i=0;i<10;i++){
        v.push_back(i);
    }
   vector::iterator pos=find(v.begin(),v.end(),5);
   if(pos!=v.end()){
       cout<m_Name=name;
        this->m_Age=age;

    }

    string m_Name;
    int    m_Age;


    bool operator==(const Person &p){
        if(this->m_Name==p.m_Name&&this->m_Age==p.m_Age)
         {
            return true;
         }
        return false;
    }

};


void test02(){
    vector v;
    Person p1("aaa",101);
    Person p2("bbb",110);
    Person p3("ccc",323);
    Person p4("ddd",143);

    v.push_back(p1);
    v.push_back(p2);
    v.push_back(p3);
    v.push_back(p4);

    vector::iterator pos=find(v.begin(),v.end(),p2);
    if(pos!=v.end()){
        cout<m_Age<{
public:
    bool operator()(Person * p1,Person *p2) const {
        if(p1->m_Name==p2->m_Name && p1->m_Age==p2->m_Age)
        {
            return true;
        }

             return false;

    }
};


void test03(){
    vector v;
    Person p1("aaa",101);
    Person p2("bbb",20);
    Person p3("ccc",323);
    Person p4("ddd",143);

    v.push_back(&p1);
    v.push_back(&p2);
    v.push_back(&p3);
    v.push_back(&p4);


    Person *p=new Person("bbb",20);
    vector::iterator pos=find_if(v.begin(),v.end(),bind2nd(myCom(),p));
    if(pos!=v.end()){
        cout<m_Name<m_Age<v;
    v.push_back(2);
    v.push_back(3);
    v.push_back(4);
    v.push_back(4);
    v.push_back(6);
    v.push_back(22);

 vector::iterator pos= adjacent_find(v.begin(),v.end());
 if(pos!=v.end()){
     cout<v;
    for(int i=0;i<10;i++){
        v.push_back(i);
    }

    if(binary_search(v.begin(),v.end(),4)){//    bool  
        cout<=4;
    }
};


void test06(){
    vectorv;
    for(int i=0;i<10;i++){
        v.push_back(i);
    }
    v.push_back(2);
    v.push_back(3);
    v.push_back(4);
    v.push_back(4);
    v.push_back(6);
    v.push_back(6);
    v.push_back(6);
    v.push_back(6);
    v.push_back(22);

    int num=count(v.begin(),v.end(),6);
    //   int
    cout<
(本ノートの内容はネット資源から整理し、削除する)