본문 바로가기

(비정기) Dlbo's Post

Generic Algorithm with C++, 03 - Template List-_-!

클클

손이 부어서 아직 완전히 제대로 굴릴수는 없습니다만,

그래도 좀 할만합니다.

일이 적응이 됐다고나 할까.

습진때문에 그만두려 했는데 구정까진 일을 계속 해야 할 듯 합니다.

그럼 이만 글 시작합지요 -_-!

----------------------------------------------------------------------------------------



오늘도 시작되는 STL 포스팅.

STL이 뭔 물건인지는 1번째에서 설명드렸지요?

ㄲㄲㄲㄲ

이번엔 Linked List입니다.

List.h 파일과 List.cpp 파일을 찾아보면 이중연결인지 단일연결 리스트인지 알겠지만

.....

C++은 객체지향형 언어입니다.

객체지향 언어가 아니고 객체지향형 언어 ㅡ.,ㅡ..

내부 구현을 일부러 직접 알아낼 필요는 없습니다.

고로, 그냥 썡까도록 하지요.

저 위의 소스코드가 바로 list의 선언방법 입니다.

list.h, 혹은 list를 인클루드 시킨 후,

using namespace std로 std 네임스페이스의 리스트임을 인지시킨 후(STL이니 std겠죠? ㄲㄲㄲ)

list<템플릿> 변수명;

list<템플릿>::iterator 변수명;

을 이용해 기본 선언을 마칩니다.

list는 vector와는 다르게 모든 노드가 하나하나 동적으로 따로 할당되기 때문에

vector처럼 인덱스를 이용한 접근이 불가능합니다.

linked list를 직접 구현해 보셨다면 아시겠지만

포인터를 이용해 각 노드에 접근하지요?

저 iterator도 저번에 말씀드렸듯 포인터입니다.



자.

저 소스코드.

단순하지요?-_-?

push_back() 메소드는 리스트의 맨 끝에 원하는 원소를 추가합니다.

1, 2가 차례로 등록되겠지요.

하지만, push_front() 메소드는 리스트의 맨 앞에 원소를 추가합니다.

고로, 마지막엔 3, 1, 2의 순으로 리스트에 삽입이 되겠지요.



자, 이번엔 삽입과 삭제 예시입니다.

insert 메소드를 이용하면 이터레이터를 이용해 원하는 위치에 원소를 박아넣을 수 있지요.

해당 이터레이터 바로 앞에 삽입됩니다.

erase를 사용하면 해당 이터레이터를 삭제할 수 있으며,

2개의 이터레이터를 인자로 사용시 1번째 이터레이터 부터 2번째 이터레이터 까지 모두 지워버립니다.

remove는 인자로 받은 값을 가지는 모든 노드를 제거하지요.

-_-!

----------------------------------------------------------------------------------------

미리 그림이 준비되지 못한점은 사과드립니다.

오늘 프레스에 손도 끼이고 신참들이 영 개판이라 좀 정신이 없었거든요.

다음엔 좀 더 양질의 포스트로 돌아오겠습니다 -_-!

다음 편은 스택입니다.