CArray, CList 선택 기준(차이, 다른점,속도,메모리,순차,임의(랜덤))


    자료구조 설명 정리 http://codens.info/661


* CArray 와 CList 속도 측정 결과 비교


반복횟수 10,000번 100,000번

반복횟수 숫자 문자열 숫자 문자열
CArray 순차 추가 3 100 31 1,409
중간 추가 10 100 830 2,237
순차 삭제 0 210 9 1,804
중간 삭제 8 115 830 3,810
CList 순차 추가 16 200 50 500
중간 추가 135 360 11,870 17,231
순차 삭제 16 40 400 600
중간 삭제 135 180 12,227 18,249


* CList 가 유리한 경우
    - 임의 접근이 필요없이, 맨 앞뒤에서만 입출력이 이루어지는 긴 자료(문자열 등)를 다룰 경우만 선택

- 스택, 큐, 덱 구조

    - 임의 접근이 필요하면 쓰면 안됨

    - 순차접근이라도 짧은 자료(숫자, 포인터 등)는 CArray가 빠름


* CArray 가 유리한 경우
    - 임의 접근이 빈번한 경우
    - 속도향상을 위한 방법 :  예상되는 크기 만큼 배열을 확보, CArray::SetSize(설정크기, 증가치)


    - CArray 개선 클래스(const 를 사용한 속도 향샹 50%)
    CArray: A simple but highly efficient improvement
http://www.codeproject.com/Articles/255/CArray-A-simple-but-highly-efficient-improvement


    - CArray 사용시 문제가 생길수 있는 경우
    CArray pitfall
http://www.codeproject.com/Articles/741/CArray-pitfall


//===================
* 클래스나 구조체등이 내부에 클래스를 포함한 경우, 배열로 다룰때는 포인터 사용
    CPtrArray, CArray<ST1*, ST1*> , CPtrList

* CArray vs CPtrArray 비교
    - CPtrArray pa1;//정상, 널포인터 배열, 사용시 항상 타입캐스팅 필요
        //구조체 안에 쓰일수 있다. 포인터로 선언하지 않고 구조체 간에 대입 연산자를 사용하려면 'operator='를 정의 해야 함
    CPtrArray<ST1*,ST1*> pa2;//<--에러

ex)
    int i=0, j=0, size=0;     int *pi=0, *pj=0;
    CPtrArray m_ptrarrTest;
    m_ptrarrTest.SetSize(3, 3);
    size = m_ptrarrTest.GetSize();//3개
    i =10;    m_ptrarrTest.Add(&i);    //4번째에 추가됨
    size = m_ptrarrTest.GetSize();
    pj = (int*)m_ptrarrTest[3];//타입 캐스트 필요
    j = *(int*)m_ptrarrTest[3];//



    - CArray a1;//<--에러, 원형template< class TYPE, class ARG_TYPE > class CArray : public CObject
    CArray<ST1, ST1&> a2;//일반적 선언,
    CArray<ST1, ST1> a3;//속도와 메모리 사용 차이 없음(?? 있어야 되는데)
    CArray<ST1*, ST1*> a4;//포인터 배열, 타입캐스팅 필요없음 <-- 추천



//=======
//참고
* C++에서 구조체와 클래스의 차이점
- 구조체(struct)와  클래스(class)는 모든 기능이 동일
    - 함수, 생성자, 소멸자, 접근지정(private), 상속 모두 가능
- 단! 구조체의 멤버는 기본적으로 'public' , 이것이 유일한 차이


반응형
Posted by codens