C++ - list

mohadang·2022년 10월 9일
0

C++

목록 보기
17/48
post-thumbnail

list

  • vector에 비해 상대적으로 사용할 일이 적음
  • 양방향 연결 리스트
    • front, back 참조자 존재
  • operator[]가 없음
  • 양쪽 끝에서 삽입 가능
  • reserve가 없음, 메모리를 할당하는 개념이 아님
    • reserver가 있으면 사용 하는것이 좋음
#include <list>

int main()
{
  std::List<int> scores;
  scores.push_front(10);// 10
  scores.push_front(20);// 20 10
  scores.push_back(30);// 20 10 30
}

삽입

  • position이 가리키는 위치에 새 요소를 삽입한다.
  • void push_front(const value_type& value)
  • void push_back(const value_type& value)
std::list<int> scores;
std::list<int>::iterator it = scores.begin();

scores.insert(it, 99);// 99
scores.push_front(10);// 10 99
scores.push_back(50);// 10 99 50

제거

  • void pop_front()
    • 첫 번째 요소 제거
  • void pop_back()
    • 마지막 요소 제거
std::list<int> scores;

// 10 99 50 추가

scores.pop_front();// 99 50
scores.pop_back();// 99
  • iterator erase(iterator position)
    • position이 가리키는 위치 요소를 제거
  • void remove(const value_type& value)
    • value 와 값이 같은 요소들을 모두 제거
std::list<int> scores = {20, 30, 40, 30, 25, 30, 70, 96};
std::list<int>::iterator it = scores.begin();

scores.erase(it);// 30, 40, 30, 25, 30, 70, 96
scores.remove(30);// 40, 25, 70, 96

리스트의 다른 메서드들

  • 정렬
  • 두 리스트 합치기
  • 한 리스트에 빼내서 다른 리스트에 넣기
  • 중복인 요소 제거
  • :

장점

  • 링크드 리스트의 장점
  • 삽입과 삭제 O(1);
  • 어느 위치든 삽입 가능

단점

  • 탐색이 느린 편
  • 임의적으로 접근 불가,[]
  • 메모리가 불 연속적
    • CPU 캐시랑 잘 동작하지 못함
profile
mohadang

0개의 댓글