কোনও ডেটা স্ট্রাকচারকে "অনড়" করার অর্থ কী?


120

আমি সূচি এবং স্ট্যাকের মতো ডেটা স্ট্রাকচারের বিবরণ দিতে অন্তর্নিহিত শব্দটি দেখেছি , তবে এর অর্থ কী?

আপনি কি একটি অনুপ্রবেশকারী ডেটা কাঠামোর একটি কোড উদাহরণ দিতে পারেন এবং এটি কীভাবে একটি অ-অনুপ্রবেশকারী থেকে আলাদা?

এছাড়াও, কেন এটিকে অনুপ্রবেশকারী (বা, অ-অনুপ্রবেশকারী) করা যায়? লাভ কি কি? অসুবিধাগুলি কী কী?

উত্তর:


107

একটি হস্তক্ষেপমূলক ডেটা স্ট্রাকচার হ'ল এমন একটি উপাদান যা সেগুলি সংরক্ষণের জন্য এটি সংরক্ষণ করতে ইচ্ছুক উপাদানগুলির সহায়তা প্রয়োজন।

আমাকে যে শব্দ। আপনি যখন সেই ডেটা স্ট্রাকচারটিতে কিছু রাখেন, সেই "কিছু" এটি কোনওভাবেই সেই তথ্য কাঠামোর মধ্যে রয়েছে তা সম্পর্কে সচেতন হয়। ডেটা স্ট্রাকচারে উপাদান যুক্ত করা উপাদানকে পরিবর্তন করে।

উদাহরণস্বরূপ, আপনি একটি অ-অনুপ্রেরণামূলক বাইনারি ট্রি তৈরি করতে পারেন, যেখানে প্রতিটি নোডের বাম এবং ডান উপ-গাছগুলির জন্য একটি রেফারেন্স এবং সেই নোডের উপাদান মানের একটি রেফারেন্স থাকে।

অথবা, আপনি এমন একটি অন্তর্ভুক্তকারী তৈরি করতে পারেন যেখানে সেই উপ-গাছের উল্লেখগুলি মানটির মধ্যেই এম্বেড থাকে।

একটি হস্তক্ষেপমূলক তথ্য কাঠামোর উদাহরণ হ'ল পরিবর্তনের যোগ্য উপাদানগুলির একটি আদেশযুক্ত তালিকা be যদি উপাদানটি পরিবর্তন হয় তবে তালিকাটি পুনরায় সাজানো দরকার, সুতরাং তালিকার অবজেক্টটিকে তাদের সহযোগিতা পেতে উপাদানগুলির গোপনীয়তার বিষয়ে অনুপ্রবেশ করতে হবে। অর্থাত। উপাদানটি তালিকায় থাকা তালিকাটি সম্পর্কে জানতে হবে এবং তার পরিবর্তনের বিষয়ে অবহিত করবে।

ওআরএম-সিস্টেমগুলি সাধারণত বস্তুর বৃহত তালিকার উপরে পুনরাবৃত্তিকে হ্রাস করতে, অনাহুত ডাটা স্ট্রাকচারের চারপাশে ঘুরে। উদাহরণস্বরূপ, আপনি যদি ডাটাবেসে সমস্ত কর্মচারীর একটি তালিকা পুনরুদ্ধার করেন, তবে তাদের মধ্যে একটির নাম পরিবর্তন করুন এবং এটি আবার ডাটাবেসে সংরক্ষণ করতে চান, কর্মচারীর অন্তর্নিহিত তালিকাটি জানানো হবে যখন কর্মচারী অবজেক্ট পরিবর্তন হয়েছিল কারণ বস্তু জানে যে এটি কোন তালিকায় রয়েছে।

একটি অনুপ্রবেশকারী তালিকা বলা হবে না, এবং কীভাবে পরিবর্তন হয়েছিল এবং কীভাবে এটি নিজে বদলেছে তা নির্ধারণ করতে হবে।


8
আমি এখনও একটি উদাহরণ এবং উপকারিতা দেখতে চাই, তবে এটি একটি ভাল ভূমিকা good
রুডিগার

পোস্ট কোডের পরিবর্তে আমি বলব যে এসটিএলটি হস্তক্ষেপহীন নয়, তবে বুস্ট.আইন্ট্রুসিভ হস্তক্ষেপমূলক (স্পষ্টতই)।
স্টোনমেটাল

1
ইন্ট্রুসিভ প্রো: আপনার তথ্যটিকে কোনও অভ্যন্তরীণ কাঠামো হিসাবে এটি ব্যবহার করা যেতে পারে অনুলিপি করার দরকার নেই। কনস: আপনার ডেটা যে পাত্রে সংরক্ষণ করা হচ্ছে সেগুলি সমর্থন করার জন্য আপনাকে অবশ্যই আপনার ডেটাতে এনক্যাপসুলেশনটি ভেঙে ফেলতে হবে your অনুপ্রবেশকারী কন্টেনারগুলি পেশাদার: আপনার পাত্রে ডেটা পরিবর্তন করার জন্য আরও ভাল এনক্যাপসুলেশন প্রয়োজন হয় না। কনস: অভ্যন্তরীণ নোড কাঠামোতে আপনার ডেটার একটি অনুলিপি প্রয়োজন।
স্টোনমেটাল

3
boost.org/doc/libs/1_45_0/doc/html/intrusive.html এর উদাহরণ এবং উপকারিতা এবং কনসগুলির একটি ভাল বর্ণনা রয়েছে।
টনি দেলরোয়

5
উদাহরণ সহ দুর্দান্ত ব্যাখ্যা: boost.org/doc/libs/1_55_0/doc/html/intrusive/…
পাওয়ে জাজকুর

22

একটি অনুপ্রবেশকারী পাত্রে ডেটা নিজেই ধারকটির জন্য প্রয়োজনীয় তথ্য সংরক্ষণের জন্য দায়বদ্ধ। এর অর্থ হ'ল একদিকে ডেটা টাইপ কীভাবে এটি সংরক্ষণ করা হবে তার উপর নির্ভর করে বিশেষকরণ করা দরকার, অন্যদিকে এর অর্থ হ'ল ডেটা কীভাবে সংরক্ষণ করা হয় তা "জানে" এবং এইভাবে কিছুটা আরও উন্নত করা যায়।

অ অনধিকারমূলক:

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;

স্বচ্ছতার জন্য ব্যক্তিগতভাবে আমি অন্তর্ভুক্তি নকশা পছন্দ করি।


এই চূড়ান্ত লাইনটি "স্বচ্ছ" শব্দের ব্যবহারের কারণে কৌতূহলপূর্ণ, কারণ একটি অনুপ্রবেশকারী ধারকটিতে থাকা বস্তুর স্বচ্ছ নয়
টানা স্লেজগাড়ির

@ আর্টবি এটি চূড়ান্ত প্রয়োগে ঠিক কীভাবে ডেটা ব্যবহার করা হয় তা জানাতে আরও স্পষ্ট হয়, অ-হস্তক্ষেপমূলক ডেটার ক্ষেত্রে আপনাকে সাধারণত পাত্রে খনন করতে হয় যখন হস্তক্ষেপমূলক ডেটার জন্য আপনি কেবলমাত্র ডেটা কাঠামো থেকে দেখেন।
এপিআই-বিস্ট

1
আমি মনে করি যে স্বচ্ছের কোনও ব্যবহার "স্বচ্ছ" কোন দৃষ্টিকোণ থেকে যোগ্য হওয়া উচিত। আমার অভিজ্ঞতায় "স্বচ্ছ" প্রায়শই ব্যবহৃত হয় যে কীভাবে ডেটা পরিচালনা করা হচ্ছে তা ডোমেনের অদৃশ্য (যেমন ডোমেন মডেলিংটি খাঁটি) indicate শব্দটি যদি উভয় উপায়ে ব্যবহার করা হয় তবে আমি এর কোনও মূল্য আছে কিনা তা অবাক করি।
টানা স্লেজগাড়ির

2
@ আর্টবি ওহ! স্বচ্ছের জন্য কিছু বিশেষ কম্পিউটার বিজ্ঞান অর্থ রয়েছে! আমার জন্য স্বচ্ছ অর্থ হ'ল আপনি অভ্যন্তরীণগুলি দেখতে পাচ্ছেন, উদাহরণস্বরূপ "ভিউটিতে বাধা না দেওয়া" যেমন শব্দটি কোনও নন-সিএস প্রসঙ্গে ব্যবহৃত হয়।
এপিআই-বিস্ট
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.