ShovelingLife
A Game Programmer
ShovelingLife
전체 방문자
오늘
어제
  • 분류 전체보기 (1072)
    • 그래픽스 (57)
      • 공통 (19)
      • 수학 물리 (22)
      • OpenGL & Vulkan (1)
      • DirectX (14)
    • 게임엔진 (183)
      • Unreal (69)
      • Unity (103)
      • Cocos2D-X (3)
      • 개인 플젝 (8)
    • 코딩테스트 (221)
      • 공통 (7)
      • 프로그래머스 (22)
      • 백준 (162)
      • LeetCode (19)
      • HackerRank (2)
      • 코딩테스트 알고리즘 (8)
    • CS (235)
      • 공통 (21)
      • 네트워크 (44)
      • OS & 하드웨어 (55)
      • 자료구조 & 알고리즘 (98)
      • 디자인패턴 (6)
      • UML (4)
      • 데이터베이스 (7)
    • 프로그래밍 언어 (348)
      • C++ (167)
      • C# (90)
      • Java (9)
      • Python (33)
      • SQL (30)
      • JavaScript (8)
      • React (7)
    • 그 외 (9)
      • Math (5)
      • 일상 (5)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

  • Source Code 좌측 상단에 복사 버튼 추가 완료
  • 언리얼 엔진 C++ 빌드시간 단축 꿀팁
  • 게임 업계 코딩테스트 관련
  • 1인칭 시점으로 써내려가는 글들

인기 글

태그

  • C++
  • 프로그래머스
  • 티스토리챌린지
  • 언리얼
  • 파이썬
  • 백준
  • string
  • 클래스
  • SQL
  • 배열
  • 유니티
  • C
  • 그래픽스
  • Unity
  • 알고리즘
  • c#
  • 문자열
  • 오블완
  • 포인터
  • 함수

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
ShovelingLife

A Game Programmer

프로그래밍 언어/C++

C++ 11 버전 주 기능

2022. 6. 5. 18:26

1. RValue

우측값이라고도 불리며, STL알고리즘을 비롯하여 임시객체를 생성하고 파괴하는 일이 잦은 코드에서는 큰 성능 향상을 불러올 수 있는 개념입니다.

void Ex1()
{
    std::vector<SomeClass> vec;
    vec.push_back(SomeClass(1, 2, "3"));
}

2. 컨테이너에 emplace 메소드 추가

여기에 새로운 SomeClass 인스턴스를 추가하려고 하면 push_back(SomeClass(1, 2, "3")) 처럼 귀찮게 SomeClass를 타이핑해야합니다. 그런데 C++  11에서는 이를 간편하게 하는 emplace 메소드 추가.

void Ex2()
{
    std::vector<SomeClass> vec;
    vec.push_back(SomeClass(1, 2, "3"));
    vec.emplace_back(1, 2, "3");
}

3. auto

void Ex3()
{
    std::vector<SomeClass> vec;
    for(std::vector<SomeClass>::iterator it = vec.begin(); it != end(); ++it)
    {
        //something
    }
}
void Ex4()
{
    std::vector<SomeClass> vec;
    for(auto it = vec.begin(); it != end(); ++it)
    {
        //something
    }
}

4. ranged for loop

void Ex5()
{
    std::vector<SomeClass> vec;
    for(auto it : vec)
    {
        //something
    }
}

5. lambda expression

void Ex6()
{
    class Compare
    {
    public:
        bool operator()(const SomeClass& o1, const SomeClass& o2) const
        {
            // compare function
        }
    };
    std::vector<SomeClass> vec;
    std::sort(vec.begin(), vec.end(), Compare());
}
void Ex6()
{
    std::vector<SomeClass> vec;
    std::sort(vec.begin(), vec.end(), [](const SomeClass& o1, const SomeClass& o2)
    {
        // compare function
    });
}

6. std::function

void Ex7()
{
    std::function<int(int, int)> op[] =
    {
        [](int a, int b) {return a + b;},
        [](int a, int b) {return a - b;},
        [](int a, int b) {return a * b;},
        [](int a, int b) {return a / b;},
        [someVar](int a, int b) {return a + b + someVar;},
    };
    for(auto f : op)
    {
        f(1, 1);
    }
}

7. nullptr

 

8. enum class

 

9. 향상된 메모리 관리

void Ex8()
{
    std::shared_ptr<SomeClass> ptr1 = std::shared_ptr<SomeClass>(new SomeClass(1, 2, "3"));  // 1
    auto ptr2 = std::shared_ptr<SomeClass>(new SomeClass(1, 2, "3"));  // 2
    auto ptr3 = std::make_shared<SomeClass>(1, 2, "3");
}

10. 정규표현식 라이브러리

 

11. Thread Support Library

std::map<std::string, std::string> g_pages;
std::mutex g_pages_mutex;
  
void save_page(const std::string &url)
{
    std::this_thread::sleep_for(std::chrono::seconds(2));
    std::string result = "fake content";
  
    g_pages_mutex.lock();
    g_pages[url] = result;
    g_pages_mutex.unlock();
}
  
int main() 
{
    std::thread t1([](){save_page("http://foo")});
    std::thread t2(save_page, "http://bar");
    t1.join();
    t2.join();
  
    g_pages_mutex.lock();
    for (const auto &pair : g_pages) {
        std::cout << pair.first << " => " << pair.second << '\n';
    }
    g_pages_mutex.unlock();
}

 

출처 : https://bab2min.tistory.com/325

'프로그래밍 언어 > C++' 카테고리의 다른 글

C++ 캐스팅 static_cast / reinterpret_cast 예제  (0) 2022.06.10
C++ SFINAE 여러 타입에 대응하는 템플릿 오버로딩  (0) 2022.06.10
C++ 콜백 CallBack 함수  (0) 2022.06.09
C++ 유니폼 초기화와 생성자  (0) 2022.06.07
C++ 함수 객체 (Fuction Object) 템플릿 / 람다식  (0) 2022.06.06
    '프로그래밍 언어/C++' 카테고리의 다른 글
    • C++ SFINAE 여러 타입에 대응하는 템플릿 오버로딩
    • C++ 콜백 CallBack 함수
    • C++ 유니폼 초기화와 생성자
    • C++ 함수 객체 (Fuction Object) 템플릿 / 람다식
    ShovelingLife
    ShovelingLife
    Main skill stack => Unity C# / Unreal C++ Studying Front / BackEnd, Java Python

    티스토리툴바