C++ 이모저모

Soooo·2024년 6월 13일

C++

목록 보기
7/7
내가 맨날 까먹는 거 정리해놓는 페이지

vector::push_back()

  • 대부분의 경우 O(1)
  • 다만, 재할당이 필요한 경우 O(n)이 되므로 예상 크기가 큰 경우에는 reserve를 사용하여 재할당 횟수를 줄이자

입출력 속도 높이기

  • scanf/printf와는 다르게 cin/cout에서는 입출력으로 인한 시간초과를 방지하기 위해 반드시 ios::sync_with_stdio(0), cin.tie(0)이라는 두 명령을 실행시킬 것
  • ios_base::sync_with_stdio(0) : C++ stream과 C stream의 sync를 끄는 명령.
    기본적으로는 C++ stream과 C stream 간의 출력 순서를 유지할 수 있도록 sync를 유지하고 있으나, cout만 사용할 경우 sync를 유지할 필요가 없으므로 시간을 절약하기 위해 sync를 꺼야한다. 반대로 말하면, 해당 명령을 실행한 이후에는 반드시 printf를 쓰지 말고 cout만 사용해야 함
  • cin.tie(0) : cin과 cout이 번갈아 나올 때 마다 flush를 하지 않도록 하는 명령. 채점 환경에서는 input buffer와 output buffer가 분리되어 있기 때문에 flush 해줄 필요 없음.
  • endl 대신 \n 사용 : endl은 줄을 바꾸고 flush를 하라는 명령이므로 endl을 사용하면 불필요한 flush 명령이 지속적으로 발생해 시간초과가 발생할 수 있음

메모리 초과시

  • vector나 pair 등 막쓰면 가끔 메모리초과 남
  • 일반 배열로 한번 바꿔보기
  • 이래도 안되면 로직문제

0개의 댓글