더북(TheBook)

2.4.2 원소에 접근하기

첨자 연산자를 사용해서 deque 컨테이너의 원소에 접근할 수 있다. 첨자 연산은 벡터에서의 첨자 연산과 같다. 즉, 첨자 연산에 경계 연산을 하지 않는다. deque 컨테이너의 원소들은 순차열이지만, 원소들을 내부에 저장하는 방식은 벡터와 다르다. 원소들을 저장하는 방식 때문에 deque 컨테이너는 크기(size)와 용량(capacity)이 항상 같다. 이런 이유 때문에 capacity() 함수 멤버는 정의되어 있지 않다. deque에는 비부호 정수 size_type으로 현재 크기를 반환하는 size() 멤버만 있다. vector와 비교했을 때 더 느리게 처리되는 이유도 deque 컨테이너의 내부 구조 차이 때문이다.

첨자 연산자를 사용해서 원소들에 접근할 수 있지만 인덱스에 대한 경계 검사는 이뤄지지 않는다. 경계 검사가 이뤄진 인덱스를 사용해서 원소들에 접근하고 싶다면 벡터와 마찬가지로 at() 멤버 함수를 써야 한다.

std::cout << words.at(2) << std::endl; // words의 세 번째 원소를 출력한다

인수에는 반드시 size_t 타입의 값을 사용해야 하고, 따라서 0보다 작은 값은 쓸 수 없다. at()에 사용한 인수가 범위를 벗어났다면, 즉 words.size()-1보다 큰 값을 지정했다면 std::out_of_range 익셉션이 발생할 것이다.

front()back() 함수 멤버도 벡터와 동작 방식이 같지만, deque는 원소들을 배열로 저장하지 않으므로 data() 멤버 함수는 없다. deque 컨테이너에는 세 가지 resize() 함수 멤버가 있으며, 벡터의 resize()와 사용법이 같다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.