(C++) STL 알아보기 (list)
1. List 자료구조와 특징
list는 연결리스트를 템플릿으로 구현한것이다.
-길이가 가변적이다.
-중간에 데이터 삽입, 삭제가 용이하다
-랜덤 접근은 용이하지 않다.
2. List를 사용해야 하는 이유
-중간에 데이터 삽입이나 삭제가 자주 발생하는 이유
- 순차적으로 저장된 데이터를 빈번하게 검색하지 않을 경우
- 특정 데이터가 저장된 위치를 파악하여 랜덤 접근을 하지 않는 경우
<정리>
-순차 접근은 list,vector 모두 유리하지 않고(map,set이 유리)
-랜덤접근을 사용할 경우 list보다 vector를 사용하는게 유리하다.
-데이터 중간에 삽입,삭제가 많을 경우 vector보다 list를 사용하는게 유리하다.
3. List의 사용
-헤더파일
#include<list>
-형(type)
list<자료형> 변수명
list<자료형>::iterator 변수명
list<자료형>::reverse_iterator 변수명
list<자료형>::size_type 변수명
-메소드 소개
1) begin
첫번째 위치를 가르킨다.
list<string> I;
list<string>::iterator li;
I.push_back("A");
l.push_back("B");
for(li=l.begin();li!=l.end();li++)
cout<<*li<<endl;
2) end
3)rbegin
역방향으로 첫번째 위치를 가르킨다.
list<string> l;
list<string>:: reverse_iterator li;
l.push_back("A");
l.push_back("B");
for(li=l.rbegin();li!=l.rend();li++)
cout<<*li<<endl;
4)push_front
첫 번째 위치에 데이터 추가
list<string> l;
l.push_front("A");
//마지막 위치에 데이터 추가
5) back
마지막 데이터의 참조반환
string s=l.back();
6)clear
저장하고 있는 모든 데이터 삭제
7) empty
비어있는지 여부 확인
8)insert
지정된 위치에 삽입
list<string> l;
l.insert(l.begin(),"ABC");
9)remove
지정된 값과 일치하는 모든 데이터 삭제
list<int> l;
l.push_back(3);
l.push_back(4);
l.remove(4);
10)sort
데이터 정렬
//오름차순
l.sort()
//내림차순
l.sort(greater<int>);
//함수정의
template <typename T> struct COMPARE
{
bool operator()(const T l,const T r)const
{
return l.ItemCd<r.ItemCd;
}
}
l.sort(COMPARE<타입명>());
list는 연결리스트를 템플릿으로 구현한것이다.
-길이가 가변적이다.
-중간에 데이터 삽입, 삭제가 용이하다
-랜덤 접근은 용이하지 않다.
2. List를 사용해야 하는 이유
-중간에 데이터 삽입이나 삭제가 자주 발생하는 이유
- 순차적으로 저장된 데이터를 빈번하게 검색하지 않을 경우
- 특정 데이터가 저장된 위치를 파악하여 랜덤 접근을 하지 않는 경우
<정리>
-순차 접근은 list,vector 모두 유리하지 않고(map,set이 유리)
-랜덤접근을 사용할 경우 list보다 vector를 사용하는게 유리하다.
-데이터 중간에 삽입,삭제가 많을 경우 vector보다 list를 사용하는게 유리하다.
3. List의 사용
-헤더파일
#include<list>
-형(type)
list<자료형> 변수명
list<자료형>::iterator 변수명
list<자료형>::reverse_iterator 변수명
list<자료형>::size_type 변수명
-메소드 소개
1) begin
첫번째 위치를 가르킨다.
list<string> I;
list<string>::iterator li;
I.push_back("A");
l.push_back("B");
for(li=l.begin();li!=l.end();li++)
cout<<*li<<endl;
2) end
3)rbegin
역방향으로 첫번째 위치를 가르킨다.
list<string> l;
list<string>:: reverse_iterator li;
l.push_back("A");
l.push_back("B");
for(li=l.rbegin();li!=l.rend();li++)
cout<<*li<<endl;
4)push_front
첫 번째 위치에 데이터 추가
list<string> l;
l.push_front("A");
//마지막 위치에 데이터 추가
5) back
마지막 데이터의 참조반환
string s=l.back();
6)clear
저장하고 있는 모든 데이터 삭제
7) empty
비어있는지 여부 확인
8)insert
지정된 위치에 삽입
list<string> l;
l.insert(l.begin(),"ABC");
9)remove
지정된 값과 일치하는 모든 데이터 삭제
list<int> l;
l.push_back(3);
l.push_back(4);
l.remove(4);
10)sort
데이터 정렬
//오름차순
l.sort()
//내림차순
l.sort(greater<int>);
//함수정의
template <typename T> struct COMPARE
{
bool operator()(const T l,const T r)const
{
return l.ItemCd<r.ItemCd;
}
}
l.sort(COMPARE<타입명>());
댓글
댓글 쓰기