ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • STL List(1)
    @ 16. 1 ~ 17. 1/STL 2013. 2. 11. 02:10

    STL list를 사용하면 좋은점

    * 연결리스트를 따로 만들어야 하는 시간을 절약할 수 있다.

     

    사용해야 하는 이유

    1. 저장할 데이터 개수가 가변적이다.

      - 저장 공간의 크기가 자동으로 변하므로 유연하게 사용할 수 있다.

    2. 중간에 데이터 삽입이나 삭제가 자주 일어나는 경우

    3. 데이터를 랜덤하게 접근하는 경우가 많지 않다.

      - list의 경우 순차접근만 가능하므로 랜덤접근의 경우 비효율적

     

    사용법

    #include<list>를 포함하고

     

    list형식은

    list<자료형> 변수 이름

    list<int> list1;

    동적할당도 가능하다.

    list<자료형>* 변수이름 = new list<자료형>;

    list<char>* list1=new list<char>;

     

    리스트에 접근을 하려면 반복자를 사용해야한다. Iterator

    포인터의 일반화된 개념이라고 봐도 된단다. 무슨이야기냐하면..

    포인터와 비슷하게 ++ --로 이동하고 대입과 비교도 가능하다..

    STL 컨테이너<자료형>::iterator 변수이름

    begin()은 첫번째 요소를 가리키는 반복자를 리턴한다

    즉, list<int>::iterator listfirst=list1.begin(); 이런식으로..

    end()도 있다 근데 마지막 요소의 바로 다음을 가리킨다. 즉 사용할 수 없는 부분을 가르킨다는 것

    앞에 r이 붙으면 반대방향으로 전환된다.

    rbegin()은 뒤에서 시작하는 첫번째 요소..rend()이것은..반대방향의 마지막 다음

     

     

    
    #include    
    #include 
    #include//stl list를 사용하기 위해서 포함
    
    using namespace std;
    
    class Point
    {
    private:
    	int num;
    public:
    	Point() {};
    	Point(int n) : num(n) {};
    	void Showdata()
    	{
    		cout << num << endl;
    	}
    };
    
    class Rect
    {
    public:
    	Rect(){}
    };
    
    int main()
    {
    	list plist; //list 자료형은 Point클래스로 plist의 변수를 생성
    
    	Point pos1(1); //pos1 객체 생성하고
    	plist.push_front(pos1); //plist의 맴버함수인 push_front를 이용하여 앞에 pos1를 넣고
    
    	Point pos2(2);
    	plist.push_front(pos2); //동일하게 pos1 앞에 pos2를 넣는다..그래서 출력자체가 21가 되는것.
    
    	Point pos3(3);
    	plist.push_back(pos3); //pos1 뒤에 pos3을 넣고
    
    	Point pos4(4);
    	plist.push_back(pos4); //pos3뒤에 pos4를 넣어서 최종 2134가 출력된다.
    
    /*
    아래는 반복자를 이용하여 변수를 선언함. 리스트에 접근하기 위해서
    list::iterator pEnd;
    */
    	list::iterator pEnd=plist.end(); ///end를 이용하여 가장 마지막 위치의 다음을 pEnd라는 변수에 넣고
    	list::iterator pFirst=plist.begin(); //begin을 이용하여 가장 처음의 위치를 pFirst라는 변수에 넣고
    	for(;pFirst!=pEnd;pFirst++) //포인터처럼 접근이 가능한 ++
    	{
    		cout << "Point의 값"; pFirst->Showdata(); //포인터처럼 접근이 가능한 -> 
    	}
    
    	plist.pop_back(); //맨 마지막 데이터를 삭제하고.
    	Point back=plist.back(); //맨 마지막 위치의 데이터의 참조값을 반환..그래서 동일한 Point형식의 back을 생성하여 대입..
    	back.Showdata();  
    
    
    
    	getch();
    	return 0;
    }
    
    

    '@ 16. 1 ~ 17. 1 > STL' 카테고리의 다른 글

    컨테이너 & 반복자 & 알고리즘 & 함수객체  (0) 2014.04.10
    STL list 주요 특징 정리  (0) 2013.05.27
    STL vector / deque 주요 특징 정리  (0) 2013.05.27
    vector<STL> 사용하기(2)  (0) 2013.03.18
    vector<STL> 사용하기  (0) 2013.03.10
Designed by Tistory.