vector 구현해보기! (3)
카테고리: CppStudy
vector 구현해보자!! (3)
pop_back()
vector 내부에는 여러가지 함수가 존재하지만 맨 뒤의 요소를 제거해주는 pop_back() 을 구현해보자.
코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
// 클래스 내부
private:
void resize(int _resize);
public:
void pop_back();
// 클래스 외부
template<typename T>
void CArr<T>::pop_back()
{
if(m_iCount <= 0) return;
else if(m_iCount <= m_iMaxCount / 2)
{
resize(m_iMaxCount / 2);
}
m_pData[--m_iCount] = {};
}
template<typename T>
void CArr<T>::resize(int _resize)
{
// if(_resize <= m_iMaxCount)
// assert(nullptr);
T* pNew = new T[_resize];
for(int i = 0; i < m_iCount; i++)
{
pNew[i] = m_pData[i];
}
delete[] m_pData;
m_pData = pNew;
m_iMaxCount = _resize;
}
push_back() 함수를 통해 vector 에 요소를 넣는 과정에서
데이터 현재 개수가 최대 개수를 넘어가게 되면 resize 함수가 호출된다.
이와 반대로 pop_back() 함수를 통해 vector 에서 요소를 꺼내오는 과정은
데이터 현재 개수가 최대 개수의 절반이 되면 resize 함수를 호출한다.
이전에 resize 함수를 현재 데이터 개수보다 더 적은 개수를 대입하여 호출할까봐
예외 처리했던 부분은 주석처리하였고, 외부에서 호출하지 못하도록 private 으로 옮겼다.
동작
반복문을 처리하기 위해 다음 함수도 추가해주자.
1
2
3
// 클래스 내부
public:
int size() { return m_iCount; }
배열의 시작주소와 m_iCount , m_iMaxCount 의 변화를 살펴보자.
다음과 같은 출력변화가 생긴다.
댓글남기기