자세한 내용은 담지 않았으니, 원하는 것은 더 검색해보시길 권합니다.

  • f, l은 앞 주소와 뒷 주소를 나타내고, 여러 개면 번호를 붙였습니다.
  • func은 호출할 함수를 나타냅니다.
  • 비교기반 함수에 대해서는 cmp 함수를 추가하는 것이 항상 가능하므로, 생략하였습니다.
  • 일반적인 문법에 대해서는 다루지 않습니다.

노트처럼 사용하실 수 있도록 모아놓고 싶었습니다.
의견은 언제든 환영이고요, 앞으로도 이 글은 지속적으로 개선해나가겠습니다.

1. 입출력

속도 개선

  • 입출력
    ios::sync_with_stdio(0); cin.tie(0);
    다른 블로그에서 친절히 설명되어 있네요.
  • push_back
    emplace_back으로 대신하기(중복을 허용하지 않는 set, map 등의 자료구조는 개선된다고 보장할 수는 없습니다.)

문자열

  • 공백까지 통째로 한 줄 입력
    getline(cin, s)
  • 숫자 하나 입력
    scanf("%.1d", &a)

서식

  • 소수점 자릿수 조정 (ex. 소수점 아래 6자리)
    1. printf("%.6f", a)
    2. cout << fixed로 소수점 고정 후 cout.precision(6)로 정밀도 조정
  • 부호 표시
    cout << showpos
  • 진수 변환
    cout << dec, cout << oct, cout << hex
    +) 0 또는 0x 붙이고 싶다면, cout << showbase

2. 비트연산

  • 공식 (z: 정수, n: 자연수)
    ~z = -z-1
    z&(1<<k) ⇔ n의 2진법 상 k+1번째 자릿수
    !n&(n-1) ⇔ n은 2의 거듭제곱수
    +) long long이라면, n&(1LL<<k)
  • 함수
    비트 1의 개수
    __builtin_popcount(n), __builtin_popcountll(n)
  • 비트셋

3. 순열 생성

  • 다음 순열
    next_permutation(f, l)

4. 이진탐색 기반 함수

*자료 구조마다 제공되는 find함수도 이진탐색 기반이다.

  • 존재성(bool)
    binary_search(f, l, x)
  • x보다 큰 최소 원소 위치(iterator)
    lower_bound(f, l, x)
  • x보다 작은 최소 원소 위치(iterator)
    upper_bound(f, l, x)
  • x가 연속된 구간(pair)
    equal_range(f, ㅣ, x)

5. 배열/벡터의 조작

  • 정렬
    sort(f, l)
  • 역순정렬
    sort(f, l, greater<int>())
    sort(v.rbegin(), v.rend()) (벡터만. 배열은 이거 ㄴㄴ)
  • 뒤집기
    reverse(f, l)
  • 원소 돌리기
    rotate(f, l)
  • 최대 원소
    max_element(f, l)
  • 최소 원소
    min_element(f, l)
  • 두 구간이 같은지
    equal(f1, l1, f2)
  • 순서 보존하여 병합(3←1+2)
    merge(f1, l1, f2, l2, f3)
  • 구간 바꾸기
    swap_ranges(f1, l1, f2);
  • 구간 복붙(2에 붙여넣음)
    copy(f1, l1, f2)
  • 채우기(0이나 1이나 단문자 같은 1byte짜리, 속도 빠름)
    memset(f, x, size)
  • 채우기(아무거로나 다 가능)
    fill(f, l, x)
  • 바꿔치기
    replace(f, l, x, y)
    replace_if(f, l, func, y)
  • 지우기
    v.erase(i)
    v.erase(f, l)
    remove(f, l, x, y)
    remove_if(f, l, func, y)
  • 묶어버리기(=압축해버리기)
    unique(f, l);
  • 섞어버리기
    random_shuffle(f, l);

6. 수학

log(x)
abs(x)
gcd(x)
lcm(x)

7. 기본적인 함수

*max가 있으면 min도 존재합니다.
max(a, b)
swap(a, b)

8. 에러 잡기

assert(조건문)

9. 초기화

  • 정의 & 초기화
    vector<int> v {p, q, r}
  • 정의, 초기화 분리
    vector<int> v;
    v = {p, q, r};
    이렇게 초기화 해주실 수 있습니다.
    일반적으로, 모든 컨테이너 기반 STL 자료구조들에 이 방식을 적용할 수 있습니다.

10. 매크로

매크로는 ()가 제일 중요합니다.

  • #연산자 for Debugging
   #define prt(x) #x << ' ' << x
   int abcd = 4;
   cout << prt(abcd);
   //output
   //abcd 4

C++측에서는 매크로의 사용을 지양하고 있으니 이 이상의 기법들은 다루지 않습니다.



전체적으로 갓라이님의 블로그를 참고했습니다. 갓라이님의 친절한 설명이 듣고 싶다면 이거 클릭하세용!

요 블로그도 좋네요!

영어 잘하면 씨플닷컴 너무 좋고여!

모르고리즘에서 데려왔는데, 티스토리 수정이 힘들어서 이 글은 걍 지우고 여기에 고정시켰어요.
대신 거기서 다른 많은 글들을 볼 수 있음당!

profile
PS 시작한지 17주째인 초보입니다. 코딩 테스트 준비하는 분들한테 도움이 될 수도 있습니다. 사용 언어는 C/C++입니다.

3개의 댓글

comment-user-thumbnail
2020년 12월 2일

으아ㅏㅏㅏㅏㅏ악
번호 잘못 매겼다

답글 달기
comment-user-thumbnail
2020년 12월 6일

번호 잘못 매겨지는 부분 해결 했어요~

1개의 답글