능력자들의 Tip

서재혁·2022년 9월 3일
0

C++

목록 보기
1/7

1. 사용헤더

#include <bits/stdc++.h>

bits/stdc++.h 헤더는 모든 표준 라이브러리가 포함된 헤더

장점

  • 프로그래밍 대회에서 쓸데없는 시간낭비를 줄여주므로 사용하면 좋습니다.
  • 필요한 헤더 파일 include 구문을 작성하는데 시간을 줄여줍니다.
  • STL이나 GNU C++의 모든 함수들을 기억할 필요가 없습니다.

단점

  • bits/stdc++.h 헤더는 GNU C++ 라이브러리의 표준 헤더가 아니기 때문에, GCC가 아닌 다른 컴파일러로 빌드를 하려고 한다면 실패합니다.
  • 쓸대없는 파일들을 추가시켜서 컴파일 시간이 늘어납니다.
  • 표준 C++이 아니기 때문에 이식성이 있지도 않고, 컴파일러 종속적입니다.

2. skill

2-1. 중복제거

// 신고 결과 받기
sort(report.begin(), report.end());
report.erase(unique(report.begin(), report.end()), report.end());

report는 "신고자 피의자" 이렇게 이루어진 string vector 이다.
<한 사람이 같은 사람을 여러번 신고해도 한 번만 적용된다> 이 부분을 위해
sort를 이용하여 사전 순으로 정렬한 후 unique를 이용해 중복된 원소를 뒤로 뺀다.
unique의 반환으로 중복된 원소가 등장하는 부분의 위치가 나오고, 해당 위치부터 끝까지 erase를 이용하여 지운다.

3. 반복

3-1. auto

어떠한 배열이나 컨테이너를 반복할 때 유용하게 쓸 수 있다. 배열에 저장되어있는 값의 타입으로 auto의 타입이 결정되기 때문이다

vector<string> vp;

for(auto p:vp) {
	// ...
}

for(auto& p:vp) {
	// ...
}

두 코드 중 위 코드의 주소를 출력하면 모두 동일한 주소를 가져온다. 이 의미는 벡터에서 값만 복사해온다는 것이다.
&를 이용하여 참조하면 모두 다른 주소를 보여준다. 이것은 벡터에 저장된 요소들의 실제 주소를 참조했다는 것을 보여준다.

profile
조금만 더

0개의 댓글