본문 바로가기

카테고리 없음

STL 사용 예제 코드


////////////////////////////////////////////////////////////////////////
//                  vector ( iterator,push_back,begin,end )
////////////////////////////////////////////////////////////////////////
#if 0
#include <iostream>
#include <vector>
using namespace std;

void main()
{
 vector<int> vector1;
 vector<int> vector2(5);   // vector2[5]
 
 vector<int>::iterator it;
 
 int array[5];
 for ( int i=0 ; i<5 ; i++ )
 {
  array[i]=i;
  vector1.push_back(array[i]);
 }
 
 cout << "vector크기" << vector1.size() << endl;
 
 for ( it=vector1.begin() ; it!=vector1.end() ; it++ )
 {
  cout << *it << endl;
 }
 
 for ( i=0 ; i<vector1.size() ; i++ )
 {
  vector2[i]=vector1[i];
 }
 
 for ( it=vector2.begin() ; it!=vector2.end() ; it++ )
 {
  cout << *it << endl;
 }
 
}

 

#endif
////////////////////////////////////////////////////////////////////////
//         <list>
////////////////////////////////////////////////////////////////////////
#if 0
#include <iostream>
#include <list>
using namespace std;

void main()
{
 list<int> List;
 list<int>::iterator it;
 List.push_back(10);
 List.push_back(9);
 List.push_back(8);
 List.push_back(7);
 
 for ( it = List.begin() ; it!=List.end() ; it++ )
 {
  cout << *it << endl;
 }
 
 cout << List.size() << endl;
 List.push_front(11);
 List.push_front(12);
 List.push_front(13);
 
 
 for ( it = List.begin() ; it!=List.end() ; it++ )
 {
  cout << *it << endl;
 }
 
 cout << List.size() << endl;
}

#endif

////////////////////////////////////////////////////////////////////////
//           <set>
//           자동으로 정렬해준다..
////////////////////////////////////////////////////////////////////////
#if 0
#include <iostream>
#include <set>
#include <ctime>   // time.h
using namespace std;

void main()
{
 srand((unsigned)time(NULL));
 
 int p[8]={5,3,2,4,1,9,8,7};
 
 set<int> set1;
 set<int>::iterator it;
 
 for ( int i=0 ; i<8 ; i++ )
 {
  int temp=rand()%8;
  set1.insert(p[temp]);
 }
 
 for ( it=set1.begin() ; it!=set1.end() ; it++ )
 {
  cout << *it << endl;
 }
}

#endif
////////////////////////////////////////////////////////////////////////
//                      <map>
////////////////////////////////////////////////////////////////////////
#if 0

#include <iostream>
#include <map>
using namespace std;

void main()
{
 map<int,char*> map1;
 map<int,char*>::iterator it;
 map1[3]="Lee";
 map1[2]="hello";
 map1[1]="hi";
 
 for ( it=map1.begin() ; it!=map1.end() ; it++ )
 {
  cout << it->first << it->second << endl;
 }
 
 map1[1]="wow";
 map1[3]="ho";
 
 for ( it=map1.begin() ; it!=map1.end() ; it++ )
 {
  cout << it->first << it->second << endl;
 }
 
 map1.erase(3);
 for ( it=map1.begin() ; it!=map1.end() ; it++ )
 {
  cout << it->first << it->second << endl;
 }
 
}

#endif
////////////////////////////////////////////////////////////////////////
//            vector 다양한 사용 예~
////////////////////////////////////////////////////////////////////////
#if 0
#include <iostream>
#include <vector>
using namespace std;

void main()
{
 vector<int> vector1(5);
 vector<int>::iterator it;
 
 for ( int i=0 ; i<5 ; i++ )
 {
  vector1[i]=i;
 }
 
 cout << "vector1 출력!" << endl;
 
 for ( it=vector1.begin() ; it!=vector1.end() ; it++ )
 {
  cout << *it << endl;
 }
 
 vector1.insert(&vector1[3],11);
 cout << "vector1 3번째에 11추가 출력!" << endl;
 for ( it=vector1.begin() ; it!=vector1.end() ; it++ )
 {
  cout << *it << endl;
 }
 
 vector1.erase(&vector1[4]);
 cout << "vector1 4번째 지움" << endl;
 for ( it=vector1.begin() ; it!=vector1.end() ; it++ )
 {
  cout << *it << endl;
 }
 
 vector<int>::reverse_iterator it2;
 cout << "역뱡향 출력" << endl;
 for ( it2=vector1.rbegin() ; it2!=vector1.rend() ; it2++ )
 {
  cout << *it2 << endl;
 }
 
 vector<char> charvector;
 vector<char>::iterator charit;
 
 for ( i=0 ; i<26 ; i++ )
 {
  charvector.push_back('A'+i);
 }
 cout << "문자출력!" << endl;
 for ( charit=charvector.begin() ; charit!=charvector.end() ; charit++ )
 {
  cout << *charit ;
 }
 cout << endl;
 
 char *p[]={"Hello","Hi","Ok"};
 vector<char*> strvector;
 vector<char*>::iterator strit;
 
 for ( i=0 ; i<3 ; i++ )
 {
  strvector.push_back(p[i]);
 }
 cout << "포인터 char 출력!" << endl;
 for ( strit=strvector.begin() ; strit!=strvector.end() ; strit++ )
 {
  cout << *strit << endl;
 }
}

#endif

////////////////////////////////////////////////////////////////////////
//                   list를 이용한 링크드리스트 구현.
////////////////////////////////////////////////////////////////////////
#if 1
#include <iostream>
#include <list>
#include <algorithm>  // find의 아빠!
using namespace std;

void main()
{
 list<int> List;
 list<int>::iterator it;

 int num;
 int input;
 int del;
 while(1)
 {
  cout << "[1]입력 [2]삭제 [3]출력" << endl;
  cout << "입력:";
  cin >> num;
 
  switch (num)
  {
  case 1:
   cout << "입력할 값:";
   cin >> input;
   List.push_back(input);
   break;
   
  case 2:
   cout << "삭제할 값:";
   cin >> del;
   List.erase(find(List.begin(),List.end(),del));
   // find 알고리즘... find(처음,끝,찾을값) 값을 리턴!!!해준다;
   break;
   
  case 3:
   for ( it=List.begin() ; it!=List.end() ; it++ )
   {
    cout << *it << endl;
   }
   break;
  }
 }
}
#endif

////////////////////////////////////////////////////////////////////////////////////
//                  list와 struct
////////////////////////////////////////////////////////////////////////////////////
#if 0
#pragma once
#include <iostream>
#include <list>
using namespace std;

typedef struct teg_Number
{
 char name[10];
 int num;
}NUMBER;

NUMBER *pNum=NULL;
list < NUMBER* > list1;
list < NUMBER* >::iterator it;

void Input()
{
 int sel;
 while(1)
 {
  cout << "[1]입력 [5]나가기" << endl;
  cout << "입력:";
  cin >> sel;
  
  if ( sel==5 ) { break; }
  if ( sel==1 )
  {
   pNum = new NUMBER;
   cout << "이름:";
   cin >> pNum->name;
   cout << "전화번호:";
   cin >> pNum->num;
   
   list1.push_back(pNum);
  }
 }
}

void Output()
{
 for ( it=list1.begin() ; it!=list1.end() ; it++ )
 {
  cout << (*it)->name << endl;       // (*it)-> <== 요부분!
  cout << (*it)->num << endl;
 }
}

void main()
{
 Input();
 Output();
 delete pNum;
}

#endif
////////////////////////////////////////////////////////////////////////////////////
//          copy, sort <algorithm>
////////////////////////////////////////////////////////////////////////////////////
#if 0
#pragma once
#include <iostream>
#include <list>
#include <vector>
#include <algorithm>
using namespace std;

void main()
{
 vector<int> vector1;
 
 // 벡터 초기화
 istream_iterator<int> in( cin );
 
 
 copy( in, istream_iterator<int>(), back_inserter( vector1 ) );
 
 // 벡터출력
 cout << " 정렬 전" << endl;
  
 ostream_iterator<int> out( cout, "    ");
 
 copy( vector1.begin(), vector1.end(), out );
 
 // 벡터 정렬
 sort( vector1.begin(), vector1.end() );
 
 cout << "\n정렬 후" << endl;
 copy( vector1.begin(), vector1.end(), out );
 
 vector<int>::iterator it;
 for( it = vector1.begin(); it != vector1.end(); it++ )
 {
  cout << "\n" << *it;
 }
}


#endif
////////////////////////////////////////////////////////////////////////////////////
//      STL 활용 예.. 여러가지..  generate,random_shuffle
////////////////////////////////////////////////////////////////////////////////////
#if 0
#pragma once
#include <iostream>
#include <list>
#include <vector>
#include <algorithm>
#include <deque>
#include <ctime>

using namespace std;

int random()
{
 return rand()%10;
}

void Print( int val )
{
 cout << val << "  ";
}

void main()
{
 srand((unsigned)time(NULL));
 vector <int> vector1(5);
 deque <int> deque1;
 deque <int>::iterator it;

 cout << "벡터 초기화" << endl;
 generate(vector1.begin(),vector1.end(),random);
 // random 값으로 vector1(5)를 초기화 한다. random 함수 부름.
 for_each(vector1.begin(),vector1.end(),Print);
 // Print함수 불러서 vector1(5)를 출력. 파라미터 필요없음. () 필요없음.

 cout << endl;

 cout << "댁 복사" << endl;
 copy(vector1.begin(),vector1.end(),back_inserter(deque1));
 // vector1(5)를 deque1 에 복사!
 for_each(deque1.begin(),deque1.end(),Print);

 cout << endl;

 cout << "댁 정렬" << endl;
 sort ( deque1.begin() , deque1.end() );
 // sort ( 시작, 끝 ) 정렬시켜준다.
 for_each(deque1.begin(), deque1.end() , Print );

 cout << endl;

 cout << "5 find, erase" << endl;
 
 it = find(deque1.begin(), deque1.end() ,5 );
 deque1.erase( it );

 for_each(deque1.begin(), deque1.end(), Print );

 cout << endl;

 cout << "댁 섞기" << endl;
 random_shuffle( deque1.begin(), deque1.end() );
 // random_shuffle <== 랜덤으로 섞어주는 함수.
 for_each( deque1.begin() , deque1.end() , Print );
}


#endif
////////////////////////////////////////////////////////////////////////////////////
//
////////////////////////////////////////////////////////////////////////////////////
#if 0
#pragma once
#include <iostream>
#include <list>
#include <vector>
#include <algorithm>
#include <deque>
#include <ctime>

using namespace std;

void main()
{
 srand((unsigned)time(NULL));

 list<int> list1(10);
 list<int>::iterator it;

 for ( it=list1.begin() ; it!=list1.end() ; it++ )
 {
  *it=rand()%100;
 }

 cout << "출력" << endl;

 for ( it=list1.begin(); it!=list1.end() ; it++ )
 {
  cout << *it << endl;
 }

 cout << endl;

 it = find_if(list1.begin(),list1.end(),bind2nd( greater<int>(),80) );
 cout << "80보다 큰 첫번째수" << *it << endl;

 it = find_if(list1.begin(),list1.end(),not1(bind2nd( greater<int>(),20) ));
 cout << "20보다 작은 첫번째수" << *it << endl;

 list1.sort(); // 정렬!
 
 for ( it=list1.begin() ; it!=list1.end() ; it++ )
 {
  cout << *it << "  " ;
 }

}
#endif


////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////
#if 1
#pragma once
#include <iostream>
#include <stack>

using namespace std;

void main()
{
 stack<int> stack1;
 
 stack1.push(5);
 stack1.push(3);
 stack1.push(7);

 cout << stack1.top() << endl;
 stack1.pop();
 cout << stack1.top() << endl;
 stack1.pop();
 cout << stack1.top() << endl;

}

#endif


출처 : http://cafe.naver.com/kilius