타이핑 귀찮아서 using namespace std 썼다고 가정함
내가 C++을 개발할때는 잘 안쓰고 PS할때만 써서 좀 그쪽으로 치우쳐있음

사실 그렇게 막 유용하진 않은데 그래도 주변에 모르는 사람이 좀 있길래 써봄

1.
pair<int, int> p;
vector<int> v;

p = make_pair(3, 4);
v.push_back(4);
v.push_back(5);
이 코드는

pair<int, int> p;
vector<int> v;
p = {3, 4}; v = {4, 5};
C++11이나 C++14부턴 이렇게 쓸 수 있음

pair p2 = {14, 17.0} ;
C++17에선 더 편하게 사용가능

물론 initalizerlist라서 PS할때 루프 안에서 쓰면 TLE 날수도 있음



2. C++는 범위 기반 for문을 지원함

for (auto& data : arr) {
  // Do something...
}

벡터 리스트 데큐같은 선형 컨테이너든 셋같은 비선형 컨테이너든 작동하지만 큐나 스택에는 작동하지 않음

unordered_set이나 map은 해시트리라 크기순으로 안나옴



3. __gcd(최대공약수)나 clz, ctz같은 비트마스킹할때 유용한 함수 지원함
C++17부터 std::gcd, std::lcm으로 표준

나는 __builtin_popcount같은 함수 많이 쓰는데 이게 gcc 내장함수라 환경이나 컴파일러에 따라 못 쓸 수도 있음



4. 정렬함수 짜기 귀찮을때 람다 쓰면 편함
using P = pair<int, int>;
sort(arr, arr+n, [](const P& a, const P& b){ return a.second > b.second; });



5. bits/stdc++.h 헤더 안에는 iostream, algorithm, vector 등 자주 쓰이는(특히 PS에서) 헤더들이 미리 포함돼있음
리눅스에서는 그냥 사용할 수 있지만 아니라면 따로 설치해서 써야됨utility라고 따로 빼기 애매한 애들 모아둔것도 있음



6. 정규식
regex r = "[a-z]+";처럼 사용함



7. 컨테이너 안의 원소들끼리 연산
vector<int> v = {1, 3, 5, 7};
int res = accumulate(v.begin(), v.end(), 0, [](int a, int b) { return a + b; });

cout << res; // 16



8. C++17에서 가변 인자 사용하기가 더 쉬워짐

template<typename... Args>
auto Func(Args... args) { return (args + ...); }

cout << Func(1, 2, 3, 4, 5); // 15

template<typename... Args>
void writeln(Args... args) {
  ((cout << args << " "), ...);
}
입력이나 출력도 이걸로 편하게 할 수 있음


9. 구조체 바인딩
template<typename T>
struct point {
  T x; T y; point(T x, T y) : x(x), y(y)
    {  }
};
vector<point<int>> points = {{0, 0}, {1, 0}, {1, 1}, {1, 0}};
이렇게 된 구조체와 변수가 있을 때

for (auto& point : points) {
  int x, y;
  tie(x, y) = point;
  // ...
}
C++11에선 이렇게 써야 했지만

for (auto& [x, y] : points) {
  //...
}
C++17에선 이렇게 해결가능



10. if나 switch 사용할 때 객체를 if나 switch 안에서 할당받은 후 유효성 검사 가능

if (QVariant var = getAnswer(); var.isValid()) {
  use(var);
}


11. extern "C"


12. sort, stable_sort, rotate, lower_bound, unique, reverse, swap, merge, max, min
이거 은근히 구현돼있는거 모르는 사람 많음
next_permutation 써야 하는 문제는 구데기임



C++20이나 constexpr에 대해선 잘 몰라서 안넣음 ㅈㅅ