C++11 에 추가된 기능 정리

    C++ 11

    C++ 11에서 추가된 기능들을 정리하고자 한다.

    1. auto

    컴파일 시에 자동으로 타입을 정해주는 키워드

    auto i = 10;    // i는 int 타입
    auto l = 10L;   // i는 long 타입
    auto* pi = &i;  // i는 int* 타입
    auto* pc = new MyClass(); //pc는 MyClass* 타입

    iterator를 사용할 때 간략화 하기 좋다.

    std::list<int>::iterator iter = m_list.begin();
    auto iter = m_list.begin();

    2. lambda (람다)

    이름 없는 함수, 함수 객체 자리에 함수 자체를 직접 구현 가능하며 함수 포인터처럼 사용도 가능하다.

    bool compare(const int& A, const int& B) const { return A < B; }
    std::vector<int> vecInt;
    std::sort(vecInt.begin(), vec.end(), compare);
    
    std::sort(vecInt.begin(), vec.end(), [](const int& A, const int& B)
    {
        return A < B;
    }
    
    auto printFunc = []{std::cout << "Hello World" << std::endl;
    printFunc();

    3. range base for

    범위 기반의 for문으로 기존 for문을 간략화 하였다.

    std::vector<int> vecInt;
    int sum = 0;
    for(auto it : vecInt)
    {
        sum += it;
    }

    4. nullptr

    NULL(0)대신 pointer의 null 값인 nullptr가 추가되었다.

    5. shared_ptr

    스마트 포인터 참조 카운트가 0이되면 자동으로 메모리를 해제한다.
    순환 참조 문제가 있다.

    6. unique_ptr

    순환 참조 문제를 해결하기 위해 참조가 1개만 존재하는 스마트 포인터이다.

    7. tuple

    2개 이상의 서로다른 데이터 타입을 묶을수 있다.
    2개 이상의 리턴값이 필요할 때 활용 가능

    std::tuple<int, int> GetPosition()
    {
        return std::make_tuple(x, y);
    }

    8. array

    일반 고정 배열 타입

    std::array<int, 10> arr;
    arr.fill(1);
    
    for( int i = 0; i < 10; i++)
    {
        arr[i] = i;
    }

    9. forward_list

    단방향 리스트 list보다 용량이 적고 빠르다.

    std::forward_list<int> flist;
    for( int i = 0; i < 5; i++)
    {
        flist.push_front(i);
    }

    10. unordered_map

    정렬되지 않은 map 컨테이너, hash_map과 같은 구조

    11. emplace

    STL 컨테이너들에게 emplace 계열 함수가 추가되었다.
    emplace는 컨테이너 내부에서 생성후 추가하는 방식이기에 임시객체를 생성하지 않거나 생성횟수를 줄일 수 있다.

    12. chrono

    나노세컨드 까지 계산이 가능하다

    13. thread

    C++ 언어차원의 thread / mutex 클래스도 추가되었다.

    14. function

    callalbe들을 객체형태로 보관할수 있는 클래스이다.

    15. decltype

    decltype은 특정 표현식의 타입을 알려준다.

    
        int a = 10;
        int b = 20;
    
        decltype (a+b) add = a+b;
        //add는 int타입
    반응형

    댓글

    Designed by JB FACTORY