A. vector
강의 내용이 너무 뒤죽박죽이여서 목차를 잡을 수 없음
강사님의 질문과 대답이 다른 경우가 많아;; 강의 흐름대로 목차를 잡음
1. vector의 기본기 (복습)
a. size와 capacity의 차이점
🌟 실제 사용하는 공간 / 할당된 공간
reserve를 먼저 사용하는 이유? ➡ 이사비용, 메모리 파편을 아낌
<size와 clear가 실행된다면>
capacity까지 줄이고 싶다면 빈 벡터로 스왑
: 사용 안함(이론적인 것)
b. 데이터 삽입, 추출, 임의 접근의 시간복잡도
push_back() : 가장 고전적으로 데이터를 삽입하는 방법
🧡 시간복잡도
- 시작 : O(n)
- 중간 : O(n)
- 끝 : O(1)
- 첫 데이터 가져오기 front() : O(1)
- 마지막 데이터 가져오기 back() : O(1)
- 임의 접근 O(1)
c. 변수와 조건식의 관계
d. 벡터 초기화 방법
e. 벡터의 복사
B. vector의 iterator
1. iterator의 기본기
데이터 위치는 상수를 더해서 옮길 수 있음
a. 데이터 순회
1) 포인터 사용
2) 반복자 클래스 사용
🧡 포인터 사용하지 않고 반복자 클래스를 사용하는 이유
자료구조는 나중에라도 바뀔수 있지만
인터페이스를 기본적으로 다 동일하게 만들어서 동일한 코드가 유지될 수 있게 하는 것
b. 데이터 검색
c. 데이터 삭제
erase() 함수를 이용
배열크기도 바뀐다!
❌ 잘못된 몬스터 삭제 코드
아래 코드 설명
0) 1부터 5까지 있는 vector
1) 기본 순회 코드: 짝수일때 제거하기
2) 다시 순회 후 값 출력
🤦♂️ 이유는 erase()의 행동때문에 그럼
삭제를 한 후 데이터의 위치가 앞당겨지는데 (3)
it++되면서 또 그 다음 위치(4)가 됨
👉 따라서 이렇게 erase 된 객체를 it으로 받아줘야 하고,
증감문을 따로 넣어줘야 한다
💥 위와같이 실시간으로 스캔하면서 무언가를 추가/삭제하는 코드는 지양하는게 좋음
2. 순회 코드 알아보기 (벡터 기반)
반복자는 위 그림과 같은 내용만 구현하면 됨
a. 클래스로 반복자 생성하기
원래 사용하던 Vector 코드에 직접 반복자 생성하기
이와같이 iterator은 container에 있는 클래스임
b. 반복자의 특성 구현하기
c. 벡터 코드 수정하기
벡터 코드에 Begin, End를 제공하게 구현하기
d. 반복자 사용하기
'자료구조와 알고리즘 > Data Structure' 카테고리의 다른 글
[게임 프로그래머 입문 올인원] 트리 자료구조 : 이진 탐색 트리 (70, 71강) (0) | 2024.02.22 |
---|---|
[게임 프로그래머 입문 올인원] STL Container : list와 iterator(67강) (0) | 2024.02.21 |
[게임 프로그래머 입문 올인원] 함수 객체 (64강) (0) | 2024.02.19 |
[게임 프로그래머 입문 올인원] 함수 포인터 (63강) (1) | 2024.02.19 |
[게임 프로그래머 입문 올인원] Maze Project : 그래프의 BFS기반 길찾기 (60강) (0) | 2024.02.19 |