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' , 이것이 유일한 차이
'Code > Desktop' 카테고리의 다른 글
PROCESS_MEMORY_COUNTERS_EX : undeclared identifier 에러 (0) | 2014.02.01 |
---|---|
자료구조 정리 (MFC 클래스) (0) | 2014.01.29 |
Codeproject Network Library (0) | 2014.01.28 |
Boost 라이브러리 설치 (2) | 2014.01.26 |
마이크로초(Micro Second) 구하기 (0) | 2014.01.24 |