C++/C++ STL

list

재윤 2024. 2. 9. 19:09
반응형

list

→ C++의 std::list는 이중 연결 리스트를 구현한 컨테이너로, 데이터를 삽입, 삭제, 검색하는데 효율적이다. std::list는 벡터와는 달리 임의 접근이 느리지만, 원소를 삽입하거나 삭제하는데 있어서는 훨씬 효율적이다.

아래는 std::list를 사용하는 기본적인 방법이다.

  • 헤더 파일
#include <list>
  • 리스트 선언
std::list<int> myList; // int 형 리스트 선언
  • 원소 추가

→ push_back(): 리스트의 끝에 원소를 추가.

→ push_front(): 리스트의 시작에 원소를 추가.

myList.push_back(10);
myList.push_front(5);

  • 원소 삭제

→ pop_back(): 리스트의 끝에 있는 원소를 삭제.

→ pop_front(): 리스트의 시작에 있는 원소를 삭제.

myList.pop_back();
myList.pop_front();
  • 원소 삽입

→ insert(): 특정 위치에 원소를 삽입.

std::list<int>::iterator it = myList.begin(); // 삽입할 위치의 반복자
it++; // 두 번째 원소 다음 위치
myList.insert(it, 7); // 두 번째 위치에 7 삽입
  • 리스트 순회
for (auto it = myList.begin(); it != myList.end(); ++it) {
    std::cout << *it << " ";
}

범위 기반 for루프도 사용 가능.

for (const auto& element : myList) {
    std::cout << element << " ";
}
  • 리스트 크기
size_t size = myList.size(); // 리스트의 현재 크기 반환
  • 리스트 초기화
std::list<int> anotherList(5, 10); // 5개의 원소를 10으로 초기화한 리스트 생성
  • 리스트 비우기
myList.clear(); // 리스트의 모든 원소 제거

 

list의 특징과 반복자

  • std::list는 벡터와는 다르게 임의 접근이 느리다. 따라서 데이터를 순차적으로 처리하거나, 중간에 삽입 또는 삭제가 필요한 경우에 사용됩니다.
  • std::list는 임의 접근 반복자를 지원하지 않음. 따라서 [] 연산자를 사용하여 특정 위치의 원소에 접근할 수 없다. 대신에, 리스트의 각 원소에 접근하려면 반복자를 사용해야 함.
  • 리스트의 첫 번째 원소에 접근하려면 begin() 함수로 반환된 반복자를 사용. 마찬가지로, 마지막 원소에 접근하려면 end() 함수로 반환된 반복자를 사용.

예시를 통해 보자

#include <iostream>
#include <list>

int main() {
    // 정수형 리스트 생성
    std::list<int> myList;

    myList.push_back(1);
    myList.push_back(2);
    myList.push_back(3);
    myList.push_back(4);
    myList.push_back(5);

    // 첫 번째 원소에 접근
    std::list<int>::iterator firstElement = myList.begin();
    std::cout << "First element: " << *firstElement << std::endl;

    // 마지막 원소에 접근
    std::list<int>::iterator lastElement = --myList.end(); // end()는 마지막 원소의 다음을 가리키므로, 이전 원소를 가리키도록 -- 연산자 사용
    std::cout << "Last element: " << *lastElement << std::endl;

    return 0;
}

결과

First element: 1
Last element: 5

 

find로 값 찾기

#include <iostream>
#include <list>

int main() {
    // 정수형 벡터 생성
    std::list<int> numbers;

    numbers.push_back(1);
    numbers.push_back(2);
    numbers.push_back(3);
    numbers.push_back(4);
    numbers.push_back(5);

    //3. find 함수
    std::list<int>::iterator list_iter;
    list_iter = std::find(numbers.begin(), numbers.end(), 2);
    std::cout << "list_iter : " << *list_iter << std::endl;

    return 0;
}

결과

list_iter : 2
반응형

'C++ > C++ STL' 카테고리의 다른 글

stack  (0) 2024.02.09
vector  (1) 2024.02.09
STL, 컨테이너, 반복자 개념  (0) 2024.02.09