كيف يكون متجه من byvalue واستخدام ناقلات من المؤشرات بالتزامن?

StackOverflow https://stackoverflow.com/questions/1609121

سؤال

لدي بعض النواقل من فئة الأشياء:

 std::vector<A> *V1;
 std::vector<A> *V2;

الخ

هناك وظيفة مع ناقلات من المؤشرات من:

 std::vector<A *> *arranged;

ما تحتاج إلى القيام به هو وضع ناقلات من V1, V2 وما إلى ذلك داخل في مرتبة دون تدميرها في نهاية المطاف, حتى ظننت أنه متجه من مؤشرات تلك الكائنات...هل هذا ممكن ؟ إذا كانت اإلجابة نعم ، هل يمكن ان تعطيني مثال على التكرار مع متغير V1 وإضافة المؤشرات من هذه الكائنات في ترتيبها ؟

تخيل أنك ، temporarly, تحتاج إلى فرز 3 ناقلات الأجسام في ناقل واحد ولكن كنت لا تريد أن تصل الفوضى الذاكرة من 3 ناقلات.

تاي ،

جو

هل كانت مفيدة؟

المحلول

هل يمكن كتابة المقارنة الخاصة بك. في هذه الحالة، فإن المقارنة العمل على A*. وهناك مثال بسيط باستخدام نوع int:

void fun(vector<int*>* vec)
{
  /////////
}

bool comp(int* lhs, int* rhs)
{
    return *lhs < *rhs;
}

int main()
{
    vector<int> first, second;
    vector<int*> vec;

    for(vector<int>::size_type i = 0; i < first.size(); ++i)
        vec.push_back(&first[i]);
    for(vector<int>::size_type i = 0; i < second.size(); ++i)
        vec.push_back(&second[i]);

    // write your own comparator! provided above: comp
    sort(vec.begin(), vec.end(), comp);

    fun(&vec);

    return 0;
}

نصائح أخرى

إذا فهمت بشكل صحيح - لقد عدة ناقلات تحتوي على بعض نوع الكائن (أ) و تريد إنشاء ناقلات جديدة تحتوي على تكوين جميع أعضاء أخرى ناقلات w/o في الواقع نسخ الكائنات حولها ، أو إزعاج امتلاك-ناقلات بأي شكل من الأشكال ؟

الأولى:لا جديد مركب متجه الحياة موجودة بالتأكيد مثل هذا أن أيا من مصدره-ناقلات سوف تتغير ؟ وهذا هو:لا يمكنك فقط الخام مؤشرات إلى المصدر-ناقلات من مركب متجه إذا كانت تلك المؤشرات سيتم إبطال خلال مدة المركب.

إذا كان الجواب على ذلك هو أي شيء آخر غير "بالتأكيد ، مؤشرات ستبقى صالحة" ثم كنت بحاجة إلى النظر في استخدام مشترك المؤشرات ، أو شيئا من هذا القبيل ، مثل أن تغيير المصدر-ناقلات لن تترك مركب متجه في غير صالح الدولة (أيلا تترك لافتا إلى ذاكرة عشوائية).

على افتراض أن مصدر-ناقلات سوف تبقى على حالها من حيث المحتويات الخاصة بهم عن عمر المركبة ، ثم بسيط الجواب هو "نعم"

vector<A> source1;
vector<A> source2;
vector<A> source3;

vector<const A*> composite; // this is a sorted vector of the above vectors' contents (by pointer)

على مركب متجه, سوف تحتاج إلى وضع محتويات (نسخة) من source1-3 في ذلك ، ثم نوع (أو يمكنك استخدام فرز الحاويات ، وفرز كما يمكنك إدراج عناصر).سوف تحتاج إلى تحديد الخاصة بك الفرز مشغل واحد dereferences المؤشرات و يطبق أي نوع الخوارزمية على الكائنات الهدف أنفسهم.

لا أن أساعدك ؟

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top