vector
std::vector의 내부 구조를 설명해주세요.
- vector의 장단점은 무엇인가요?
- vector가 연속 메모리를 사용하는 이유는 무엇인가요?
- vector의 시간 복잡도를 설명해주세요.
size와 capacity의 차이는 무엇인가요?
- vector가 재할당되는 조건은 무엇인가요?
- 재할당이 발생하면 기존 포인터와 반복자는 어떻게 되나요?
- vector 내부 원소의 주소를 장기간 저장하면 위험한 이유는 무엇인가요?
reserve와 resize의 차이는 무엇인가요?
push_back과 emplace_back의 차이는 무엇인가요?
clear를 호출하면 capacity도 줄어드나요?
- vector의 중간 원소 삭제 비용은 얼마인가요?
erase-remove 관용구를 설명해주세요.
- vector와 array 중 무엇을 선택하나요?
- vector와 deque 중 무엇을 선택하나요?
list·deque
std::list의 장단점은 무엇인가요?
- list의 임의 접근이 느린 이유는 무엇인가요?
- list가 vector보다 유리한 상황은 언제인가요?
- 실제 게임 코드에서 list보다 vector가 자주 유리한 이유는 무엇인가요?
std::deque의 내부 구조는 어떻게 되나요?
- deque는 vector와 비교해 어떤 장단점이 있나요?
map·unordered_map
std::map은 어떤 자료구조로 구현되나요?
std::map의 탐색 복잡도는 얼마인가요?
std::unordered_map은 어떻게 동작하나요?
- map과 unordered_map의 차이는 무엇인가요?
- 해시 함수란 무엇인가요?
- 해시 충돌은 어떻게 해결하나요?
- 체이닝과 개방 주소법의 차이는 무엇인가요?
- load factor란 무엇인가요?
- rehash는 언제 발생하나요?
- unordered_map의 최악 시간 복잡도는 왜 O(n)인가요?
- 정렬된 순회가 필요하면 어떤 컨테이너를 사용하나요?
- 사용자 정의 타입을 map 키로 사용하려면 무엇이 필요한가요?
- 사용자 정의 타입을 unordered_map 키로 사용하려면 무엇이 필요한가요?
- 부동소수점 값을 map이나 unordered_map 키로 사용하면 왜 위험한가요?
- 문자열 키와 정수 키의 성능 차이는 어떻게 발생하나요?
반복자·알고리즘
- 반복자란 무엇인가요?
- 입력, 출력, 순방향, 양방향, 임의 접근 반복자의 차이는 무엇인가요?
- 반복자 무효화란 무엇인가요?
- vector, list, map의 반복자 무효화 조건을 설명해주세요.
std::sort의 평균 복잡도는 얼마인가요?
std::stable_sort와 std::sort의 차이는 무엇인가요?
lower_bound와 upper_bound의 차이는 무엇인가요?
find와 binary_search는 언제 사용하나요?
- 람다 캡처 방식
[=], [&], [this]의 차이는 무엇인가요?
- 람다에서 참조 캡처가 위험해질 수 있는 경우는 언제인가요?