STL - list - Sample (2)

2016. 12. 2. 11:28IT-개발/C및C++

반응형


// insert의 세 가지 방법


#include <iostream>

#include <list>

using namespace std;


void main()

{

list< int > list1;

list1.push_back(20);

list1.push_back(30);

cout << "삽입 테스트 1" << endl;


// 첫 번째 위치에 삽입한다.

list< int >::iterator iterInsertPos = list1.begin();

list1.insert( iterInsertPos, 100 );


// 100, 20, 30 순으로 출력된다.

list< int >::iterator iterEnd = list1.end();

for(list< int >::iterator iterPos = list1.begin();

iterPos != iterEnd;

++iterPos )

{

cout << "list 1 : " << *iterPos << endl;

}

cout << endl << "삽입 테스트 2" << endl;


// 두 번째 위치에 200을 2개 삽입한다.

iterInsertPos = list1.begin();

++iterInsertPos;

list1.insert( iterInsertPos, 2, 200 );


// 100, 200, 200, 20, 30 순으로출력된다.

iterEnd = list1.end();

for(list< int >::iterator iterPos = list1.begin();

iterPos != iterEnd;

++iterPos )

{

cout << "list 1 : " << *iterPos << endl;

}

cout << endl << "삽입 테스트 3" << endl;

list< int > list2;

list2.push_back( 1000 );

list2.push_back( 2000 );

list2.push_back( 3000 );


// 두 번째 위치에 list2의 모든 데이터를 삽입한다.

iterInsertPos = list1.begin();

list1.insert( ++iterInsertPos, list2.begin(), list2.end() );


// 100, 1000, 2000, 3000, 200, 200, 20, 30 순으로출력된다.

iterEnd = list1.end();

for(list< int >::iterator iterPos = list1.begin();

iterPos != iterEnd;

++iterPos )

{

cout << "list 1 : " << *iterPos << endl;

}

}


// erase의 두 가지 사용방법

#include <iostream>

#include <list>

void main()

{

list< int > list1;

list1.push_back(10);

list1.push_back(20);

list1.push_back(30);

list1.push_back(40);

list1.push_back(50);

cout << "erase 테스트 1" << endl;


// 첫 번째 데이터 삭제

list1.erase( list1.begin() );


// 20, 30, 40, 50 출력

list< int >::iterator iterEnd = list1.end();

for(list< int >::iterator iterPos = list1.begin();

iterPos != iterEnd;

++iterPos )

{

cout << "list 1 : " << *iterPos << endl;

}

cout << endl << "erase 테스트2" << endl;


// 두 번째 데이터에서 마지막까지 삭제한다.

list< int >::iterator iterPos = list1.begin();

++iterPos;

list1.erase( iterPos, list1.end() );


// 20 출력

iterEnd = list1.end();

for(list< int >::iterator iterPos = list1.begin();

iterPos != iterEnd;

++iterPos )

{

cout << "list 1 : " << *iterPos << endl;

}

}


// list 반복자의 랜덤 접근

vector는 다음과 같이 바로 접근 가능

iterPos = vector.begin() + 3;

list에서는 

++iterPos;

로만 접근이 가능


// Remove

list에서 지정한 값과 일치하는 모든 데이터 삭제. erase와 다른 점은 erase는 반복자를 통해서 삭제하지만 remove는 값을 통해서 삭제


list1에 담겨 있는 요소 중 특정 값과 일치하는 것을 모두 삭제하고 싶을 때는 아래와 같이 한다.

list1.remove( 20 ); // 20을 삭제한다.