개발 (develop)

vector, deques, list 상황에 맞게 쓰자

삽질그만 2019. 7. 26. 17:08

1. 벡터(vector)

     1) 가변 길이 시퀀스에 대한 임의 접근 가능

     2) 시퀀스 끝 부분에서 신속한 삽입, 삭제 가능

     3) 시퀀스의 맨 끝부분이 뿐만아니라 임의의 다른 위치에서도 삽입,삭제가 필요한 경우라면 다른걸 써라

     4) 맨 앞에서의 삽입과 삭제는 벡터에서는 선형 시간이 소요되는 연산이므로 덱을 사용하라

     5) 삽입과 삭제가 시퀀스 중간에서 발생한다면, 리스트(list)를 사용하라

    

2. 덱(deques)

     1) 벡터와 비교했을 때, 기능면에서는 거의 차이가 없다.

     2) 벡터의 맨 앞에서 수행되는 삽입과 삭제는 선형 시간이 소요되는 반면에, 덱은 벡터보다 훨씬 빨리 상수 시간 내에 수행할 수있다.

     3) 벡터와 마찬가지로 임의 접근 반복자다.

     4) 양쪽 삽입, 삭제가 빈번한 경우는 덱을 사용하는것이 좋다

     5) 벡터를 사용하는 프로그램을 덱으로 변경하는것은 매우 쉽다.

 

3. 리스트(list)

     1) 삽입과 삭제가 상수 시간 연산이 되도록 임의 접근 반복자를 포기했다.

     2) 임의 접근이 없어지면 정렬과 같은 일부 중요 알고리즘들을 사용 못한다. (대신, 이러한 연산들을 리스트 클래스의 멤버 함수로 제공한다.)

     3) 시퀀스 뒤집기와 같은 몇가지 연산들도 제공.

     4) 한쪽끝, 양쪽끝 뿐만아니라 임의의 위치에서 상수시간이 소요되는 연산이다.

     5) 시퀀스 중앙에서 삽입, 삭제가 빈번하고, 한 위치에서 많이 떨어진 다른 위치로 한번에 이동할 필요가 없는 경우에 사용되는 추상이다.