C++/summary

STL 알고리즘 transform || remove || sort || 함수객체(함수자)

gandus 2010. 11. 3. 10:42

find()  for_each() find_if() 중에 함수 형식이 다른것은??  find() 이건 함수 전달이 없다.


vector<int> vec(10) 이렇게 생성자를 통한 생성없이 만들려면.....
vector<int> vec 이렇게 한다면 공간이 없기때문에 push_back을 통해서 반드시 넣어야한다.


transform은 컨네이어를 하나로 이동하는것이지만
컨테이너 a,b 를 가져와 가공해서 -> c로 복사한다.
transform(a.begin(), a.end(), b.begin(), func)

transform(a.begin(), a.end(), b.begin(), c.begin(), func )  -> 이렇게 만든다.
func의 타입은  전달값은 가져오는 컨테이너 타입 - >전달값은 a,b 두개를 가져야한다.
반환값은 복사하는 컨테이너의 타입과 같아야한다.



#include<iostream>

#include<algorithm>

#include<vector>

 

using namespace std;

 

int add(int a, int b){

        return a+b;

}

 

void main(){

 

        vector<int> a;

        vector<int> b;

        vector<int> c(10);

 

        for(int i=1; i<=10; i++){a.push_back(i);b.push_back(i+3);}

       

        transform(a.begin(), a.end(), b.begin(), c.begin(), add);   

         // 이렇게 5개의 매개변수를 가진다.
 

        vector<int>::iterator it;

 

        for(it=c.begin(); it!=c.end(); ++it)

        {

               cout<< *it <<" ";

        }

}




Remove() 중요함

배열[5]
vector<int> fruits(10)   공간만
vector<int> fruits( &배열[0],  &배열[5])   알아서 초기화를 해준다.
배열[5] 를 해야된다, 마지막 값의 다음공간을 넣어준다






it =  remove() 의 반환값은 반복자이다


remove는 요소는 지우지만, 공간은 그대로 둔다 대신에 오른쪽값을 채운다.
하지만 값이 의미가 없으므로

fruits.erase(it, fruits.end())  erase를 통해서 위치를 지워준다.
it에 지워진 곳의 위치가 오기때문에.







초기값은 asc이다



desc으로 할려면 이렇게 한다.







sort의 마지막 매개변수에 

미리 만들어진 함수객체를 보낸다.

#include<functional> 을 만드시 선언해야한다.





함수 객체이다

#include<functional> 을 만드시 선언해야한다.










bind2nd  => 두번째 인자값을 50으로 디폴트 하기위함이다.

만약 50보다 작은걸 찻으려면

bind1st => 50 > 인자값     -> 50보다 작으면 참이므로 ....