반응형
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 |