#include <algorithm>

2020. 12. 1. 00:25컴퓨터 수업/C++

#include <iostream>
#include <functional>
#include <algorithm>
#include <vector>

using namespace std;

int main() {
    vector<int> v1{1, 2, 3, 4};
    for (int elem : v1) {
        cout << elem << '\t';
    }
    cout << endl;

    //for_each(iter_begin, iter_end, lambda)
    // -특징1 :  lambda함수는 각 element에 대해 수행, return type이 없음 (void)
    // -특징2 :  외부 변수를 for_each에 사용할 때, closure를 사용
    for_each(begin(v1), end(v1), [](int elem) { cout << elem << '\t'; });
    cout << endl;

    for_each(begin(v1), end(v1), [](int &elem) { elem++; });
    for_each(begin(v1), end(v1), [](int elem){cout << elem << '\t';});

    int a = 10;
    for_each(begin(v1), end(v1) , [a](int &elem){elem *= a;});

    vector<int> v2(5);
    //copy() : src의 element를 dst(destination)로 복사 src(v1)->(element)->dst(v2)
    //copy( src_iter_begin, src_iter_end, dst_iter_begin)
    // v1 : {20, 30, 40 ,50}
    // v2 : { 0,  0,  0,  0, 0}
    copy(begin(v1), end(v1), begin(v2));
    for_each(begin(v2), end(v2), [](int elem){cout << elem << '\t';});
    cout << endl;
    //copy(begin(v1)+1, end(v1)-1 , begin(v2) +1 ) 과 같은 형태도 가능

    // transform() : src의 element를 *변환해서* dst로 복사 (for_each + copy)
    // transform(src_iter_begin, src_iter_end, dst_iter_begin, lambda)
    // - 특징 : lambda의 return type이 존재 (for_each의 lambda는 return type이 void)
    transform(begin(v1), end(v1), begin(v2), [](int elem){return elem*elem;});
    for_each(begin(v2), end(v2), [](int elem){cout << elem << '\t';});
    cout << endl << endl;

    return 0;
}

'컴퓨터 수업 > C++' 카테고리의 다른 글

Lambda Function  (0) 2020.11.30
템플릿★  (0) 2020.11.19
템플릿(임시)  (0) 2020.11.19
virtual , 업/다운 캐스팅, 정적타입바인딩, 추상클래스 ★  (0) 2020.11.10
C++ 상속  (0) 2020.11.05