C++/summary

STL 알고리즘 & 종류모음 & find ()

gandus 2010. 10. 27. 11:09
반복자 : 포인터

클래스 : 데이타 타입
string   :  char*   

백터 : 배열


->차이점?  미리 만들어진 함수등을 사용 할 수 있어서 
                쉽게 접근및 연산이 가능하다.



 
·STL 기반의 탐색(searching), 정렬(sorting), 계수(counting) 알고리즘

알고리즘은 방법일뿐 자료는 컨테이너에 있다, 이에 접근하기 위해서 반복자를 사용



불변경 알고리즘
변경 알고리즘이 존재한다.


알고리즘의 종류







접근하기 위한 반복자


 
·컨테이너에서 다음 요소를 가리키기 위한 ++ 연산자
·컨테이너에서 이전 요소를 가리키기 위한 -- 연산자
·두개의 반복자가 같은 요소를 가리키고 있는 지를 확인하기 위한 ==!= 연산자
·반복자가 가리키는 요소의 값을 추출하기 위한 역참조 연산자 *
·v.begin() 함수는 컨테이너 v에서 첫 번째 요소를 반환한다.
·v.end() 함수는 컨테이너 v에서 마지막 요소를 지났는지를 나타내는 값을 반환한다.
 .end() 는 마지막의 다음 주소를 가진다.  NULL 과 같은,,




     랜덤 접근이 가능한 반복자.

#include
<iostream>

#include<vector>

using namespace std;

 

void main(){

 

        vector<int> vec;

 

        for(int i=0; i<10; i++)

               vec.push_back(i);

 

        vector<int>::iterator it;

        it = vec.begin();

 

        cout<< it[2]<<endl;

        cout<< *(it+2)<<endl;

       

        it = it+5;

        it--;

        cout<<*it <<endl;

}



find() 알고리즘을 이용한 예제

#include<iostream>

#include<algorithm>

#include<string>

#include<vector>

using namespace std;

 

void main(){

        /*

 

        vector<int> vec;

 

        for(int i=0; i<10; i++)

               vec.push_back(i);

 

        vector<int>::iterator it;

        it = vec.begin();

 

        cout<< it[2]<<endl;

        cout<< *(it+2)<<endl;

       

        it = it+5;

        it--;

        cout<<*it <<endl;

        */

 

 

       

        // find( 알고리즘을이용한예제다)

 

        string fruits[5] = {"사과" ,"딸기","토마토","포도",""};

 

        vector<string> vec( &fruits[0], &fruits[5] ); // 배열을백터에통으로넣어준다.

 

        vector<string> ::iterator it;

 

        it = find( vec.begin(), vec.end(), "");

 

        if( it != vec.end() )

               cout<<"배가" << distance(vec.begin(), it) <<"에있습니다."<<endl;       

}




find_if 함수





함수의 이름을 전달한다.
함수의 이름은 함수의시작 주소이다. 

함수는 반드시 bool 타입이며, 
매개 변수는 반드시 STL의 타입에 맞게 한다.   백터 스트링  =  함수 (스트링)


#include<iostream>

#include<string>

#include<vector>

#include<algorithm>

using namespace std;

 

bool checkKim(string s){

 

        if(s.find("") != string::npos)

               return true;

 

        else

               return false;

}

 

void main(){

 

        string name[5] = {"김철수","김갑수","강감찬","안철수","김동현"};

        vector<string> vec(&name[0], &name[5]);

 

        vector<string>::iterator it;

        it = vec.begin();

 

        while(true){

 

               it = find_if(it, vec.end(), checkKim);

               if(it ==vec.end())

                       break;

 

               cout<<"위치" << distance(vec.begin(), it) <<"에서"<<*it <<"를탐색하였음"<<endl;

              

               it++;

        }

 

}