[완료] STL 에서 std::list 를 중첩되도록 구조체를 정의해도 문제 없을까요?
글쓴이: jeongheumjo / 작성시간: 금, 2011/04/15 - 10:25오전
#include "stdafx.h" #include <list> typedef std::list<int> RERegion; int _tmain(int argc, _TCHAR* argv[]) { RERegion theRegion; RERegion theSecondRegion; std::list<RERegion> listRegion; theRegion.push_back(0); theRegion.push_back(1); theSecondRegion.push_back(10); theSecondRegion.push_back(20); theSecondRegion.push_back(30); listRegion.push_back(theRegion); listRegion.push_back(theSecondRegion); return 0; }
이렇게 테스트를 해보았는데 별 문제는 없었습니다.
그런데 값을 추가 삭제 하는 등 STL 오퍼레이션의 모든 과정에서 이처럼 std::list 가 중첩되도록 구조체를 정의(listRegion)하는 것이 아무 문제 없겠는가 하는 것이 고민거리 입니다.
STL은 레퍼런스 의미론은 지원되지 않는다고 미약하게 알고 있어서 고민이 됩니다.
감사합니다.
Forums:
기능상 문제는 없습니다.
성능은 문제가 될 수 있지요.
안녕하세요?
그렇다면 성능을 개선할 수 있으려면 어떻게 해야 할까요?
무엇을 하려는가에 따라 다르겠지요.잦은 삽입 삭제가
무엇을 하려는가에 따라 다르겠지요.
잦은 삽입 삭제가 일어난다고 하면, list도 나쁘지 않습니다.
하지만 삽입삭제뿐만 아니라 잦은 검색이 일어난다면, R&B 트리를 구현하거나, 잘 구현된 라이브러리를 써야하겠지요.
데이터를 박아놓고 검색만 할거라면, 배열이나 해쉬같은 걸 써야할테구요.
------------------------------
How many legs does a dog have?
여러가지 방법이 있습니다.
C, C++에서 기본적인 aliasing은 pointer를 통해서 가능하죠. C++ reference는 객체가 될 수 없으므로 container에 담을 수 없습니다.
Pointer를 쓰면서 이제 자원관리에 대한 고민이 시작되겠죠.
Pointer 말고도 list는 splice를 지원하니까 상위 container에 넣은 후 원본객체를 쓰실 생각이 없으시다면 빈 list를 넣은 후 splice 하는 것도 나름 괜찮습니다.
Visual C++ 가 사용하는 Dinkumware 구현은 splice의 성능이 좀 떨어집니다만(대신 size가 빠르죠.) 그래도 복사삽입하는 것 보다는 나을 겁니다.
위 두 분께 감사드립니다.
일정에 쫒기다보니까,
일단은 잘못된 코드만 아니면 구현부터 해야할 상황입니다.
알려주신 힌트를 가지고 성능 개선할 때 참고해야 할 것 같습니다.
감사합니다.
댓글 달기