데이터 구조가 "침투 적"이라는 것은 무엇을 의미합니까?
목록 및 스택과 같은 데이터 구조를 설명 하는 데 사용되는 침입 이라는 용어를 보았지만 그 의미는 무엇입니까?
침입 형 데이터 구조의 코드 예제를 제공 할 수 있으며 비침 입형 데이터 구조와 어떻게 다른가?
또한, 왜 방해 (또는 비방 해)로 만드나요? 이점은 무엇입니까? 단점은 무엇입니까?
침입 데이터 구조는 저장하려는 요소의 도움이 필요한 구조입니다.
다시 말하겠습니다. 데이터 구조에 무언가를 넣으면 그 "무언가"가 어떤 식 으로든 그 데이터 구조에 있다는 사실을 인식하게됩니다. 데이터 구조에 요소를 추가하면 요소가 변경됩니다.
예를 들어, 각 노드에 왼쪽 및 오른쪽 하위 트리에 대한 참조와 해당 노드의 요소 값에 대한 참조가있는 비 간섭 이진 트리를 빌드 할 수 있습니다.
또는 해당 하위 트리에 대한 참조가 값 자체에 포함되는 방해 요소를 만들 수 있습니다.
침입 데이터 구조의 예는 변경 가능한 요소의 정렬 된 목록입니다. 요소가 변경되면 목록을 다시 정렬해야하므로 목록 개체는 요소의 협력을 위해 요소의 프라이버시를 침해해야합니다. 즉. 요소는 자신이있는 목록에 대해 알아야하며 변경 사항을 알려야합니다.
ORM 시스템은 일반적으로 큰 개체 목록에 대한 반복을 최소화하기 위해 침입 데이터 구조를 중심으로 회전합니다. 예를 들어, 데이터베이스에있는 모든 직원의 목록을 검색 한 다음 그 중 하나의 이름을 변경하고 데이터베이스에 다시 저장하려는 경우 직원 개체가 변경 될 때 방해가되는 직원 목록이 알려집니다. 개체는 어떤 목록에 있는지 알고 있습니다.
방해가되지 않는 목록은 알려지지 않으며 변경된 내용과 자체적으로 변경된 방법을 파악해야합니다.
침입 컨테이너에서 데이터 자체는 컨테이너에 필요한 정보를 저장합니다. 즉, 한쪽에서는 데이터 유형이 저장 방법에 따라 특수화되어야하고 다른 쪽에서는 데이터가 저장 방법을 "알고"있으므로 약간 더 최적화 할 수 있음을 의미합니다.
비침 입성 :
template<typename T>
class LinkedList
{
struct ListItem
{
T Value;
ListItem* Prev;
ListItem* Next;
};
ListItem* FirstItem;
ListItem* LastItem;
[...]
ListItem* append(T&& val)
{
LastItem = LastItem.Next = new ListItem{val, LastItem, nullptr};
};
};
LinkedList<int> IntList;
방해 :
template<typename T>
class LinkedList
{
T* FirstItem;
T* LastItem;
[...]
T* append(T&& val)
{
T* newValue = new T(val);
newValue.Next = nullptr;
newValue.Prev = LastItem;
LastItem.Next = newValue;
LastItem = newValue;
};
};
struct IntListItem
{
int Value;
IntListItem* Prev;
IntListItem* Next;
};
LinkedList<IntListItem> IntList;
개인적으로 저는 투명성 때문에 침입 형 디자인을 선호합니다.
참고 URL : https://stackoverflow.com/questions/5004162/what-does-it-mean-for-a-data-structure-to-be-intrusive
'IT story' 카테고리의 다른 글
동일한 요소에 대해 여러 개의 : before 의사 요소를 가질 수 있습니까? (0) | 2020.08.19 |
---|---|
asp.net mvc는 컨트롤러를 별도의 프로젝트에 넣습니다. (0) | 2020.08.19 |
“-g”플래그와 함께 npm을 언제 사용해야하며 그 이유는 무엇입니까? (0) | 2020.08.19 |
R에서 지능형 포인트 라벨 배치 (0) | 2020.08.19 |
Java의 콘솔에서 단일 문자를 읽는 방법 (사용자가 입력 할 때)? (0) | 2020.08.19 |