기술면접준비 2
vector와 list의 차이에 대해서 설명하세요.
vector는 동적배열의 클래스 탬플릿이라고 할 수 있습니다.
vector객체는 요소가 추가되거나 삭제될 때마다 자동으로 메모리를 재할당하여 크기를 동적으로 변경합니다.
list는 이중연결리스트의 클래스 탬플릿이라고 할 수 있습니다.
이 컨테이너는 모든 요소에서 양방향 접근, 빠른 삽입과 삭제를 할 수 있지만, 임의 접근은 불가합니다.
또한 리스트를 구성하는 링크(link)는 포인터이므로, 다음과 같은 특정 작업을 링크만 재배치하는 것으로 아주 빠르게 수행할 수 있습니다.
2. C++과 C#에서의 구조체와 클래스 차이에 대해서 설명하시오.
C++에서의 차이는 기본접근지정자의 차이가 전부입니다.
struct에서의 기본접근 지정자는 public이고 class에서의 기본접근 지정자는 private입니다.
C#에서의 차이는
구조체는 값타입 클래스는 주소타입으로 분류됩니다.
값타입인 구조체는 가비지 대상이 되지 않기 때문에 크기가 작고 담순한 함수들을 포함하는 선, 컬러 등을 구조체로 정의해 두었고, 클래스는 가비지 대상이기 때문에 참조자가 없을경우 삭제당할 위험또한 존재합니다.
또한, C#에서의 구조체는 상속이 불가능합니다.
즉 구조체는 메모리 그 자체를 이용하고자 할때 사용하고, 클래스는 기능적인 측명이 더 중요할때 사용합니다.
3. 트리에 대해서 아는대로 말하시오.
트리는 탐색에서의 뛰어난 성능을 가진 컨테이너로서 계층적인 데이터 검색에 압도적인 성능을 보입니다.
이진트리 레드블랙트리, 세그먼트 트리, AVL트리 등 여러 종류의 트리가 있고,
이진트리는 각각의 노드가 최대 두개의 자식노드를 가지는 트리 구조로서
노드당 두개의 자식노드를 가지고 있는 완전이진트리로 구성이 된다면 아주 좋은 트리가 되지만, 그렇지 않은 경우에는 트리를 쓰느니만 못한 결과를 초래 할 수도 있습니다.
이러한 단점을 해결하기 위해서 발전된 형태가 레드블랙트리가 있는것으로 알고 있습니다.