size()의 결과를 0과 비교할 생각이라면 차라리 empty를 호출하자

STL에서 제공하는 컨테이너들은 각각의 라이브러리 마다 여러가지 방법으로 구현되어 있으며 당연히 컨테이너에서 실제로 추가되어 있는 객체의 개수를 얻는 방법도 여러가지 방법이다.
이것은 컨테이너의 size() 함수가 여러가지 방법으로 구현되어 있을수 있다는 의미이며 정확한 규칙에 의거한 속도를 보장하지는 않는 의미다.

예를 들어 list 의 객체의 개수를 간단히 얻는 방법은 처음부터 끝까지 노드를 따라가며 세어보는 방법이지만 list::size_type 을 맴버변수로 가지고 계속 값을 업데이트 해줌으로써 상수시간에 객체의 개수를 얻을 수도 있다.
하지만 list 의 splice 함수의 동작은 변경되는 개수가 몇개인지 세어보기 전에는 알수 없기때문에 값을 계속 업데이트 해주는 방법은 splice 함수에 불필요한 연산을 요구하게 된다. 어떤 방법에 의해서 size()와 splice 를 구현할지는 라이브러리제작자의 판단에 따르게 될것이다.

이런 이유로 라이브러리 간의 size()함수의 구현 방법이 다를수도 있으며 size() 함수가 선형적인 시간을 요구할수도 있으므로 해당 컨테이너가 단순히 비어있는지 아닌지 를 판단하기 위해서라면 간단히 상수시간에 결과를 리턴해주는 empty() 사용하는것이 좋다.

댓글 남기기

이메일은 공개되지 않습니다. 필수 입력창은 * 로 표시되어 있습니다