데이터 구조가 "침입적"이라는 것은 무엇을 의미합니까?
목록이나 스택과 같은 데이터 구조를 나타내는 데 사용되는 침입이라는 용어는 본 적이 있지만, 그 의미는 무엇입니까?
침입 데이터 구조의 코드 예시와 침입하지 않는 데이터 구조와 어떻게 다른지 알려 주시겠습니까?
또, 왜 그것을 방해(또는 비침해)로 하는 것입니까?어떤 장점이 있나요?단점은 무엇입니까?
침입적 데이터 구조는 저장하려는 요소의 도움이 필요한 데이터 구조입니다.
다시 말할게요그 데이터 구조에 무언가를 넣으면, 그 「뭔가」는, 그 데이터 구조내에 있는 것을 어떤 식으로든 인식하게 됩니다.요소를 데이터 구조에 추가하면 요소가 변경됩니다.
예를 들어, 비침입 바이너리 트리를 구축할 수 있습니다.각 노드에는 왼쪽 및 오른쪽 서브트리에 대한 참조와 해당 노드의 요소 값에 대한 참조가 있습니다.
또는 이러한 서브트리에 대한 참조가 값 자체에 포함된 침입적인 서브트리를 구축할 수 있습니다.
침입적인 데이터 구조의 예로는 가변 가능한 요소의 순서가 매겨진 목록이 있습니다.요소가 변경되면 목록의 순서를 변경해야 하므로 목록 객체는 요소의 협력을 얻기 위해 요소의 프라이버시를 침해해야 합니다.즉, 요소는 자신이 속한 목록에 대해 알고 변경 사항을 알려야 합니다.
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이야기' 카테고리의 다른 글
Vue 메서드 호출 (0) | 2022.05.29 |
---|---|
JPA와 휴지 상태를 사용할 때 JOIN과 JOIN FETCH의 차이점은 무엇입니까? (0) | 2022.05.29 |
열거 서수에서 열거 형식으로 변환 (0) | 2022.05.29 |
메서드 인수에 Not Null 주석 사용 (0) | 2022.05.29 |
Vue.js - Vuex: 모듈스토어를 도우미 파일로 Import할 때 액션이 디스패치되는 이유는 무엇입니까? (0) | 2022.05.29 |