البحث عن القيمة القصوى في متجه من الكائنات

لدي متجه v من الكائنات A في Class B حيث لكل كائن عضو: مستوى int. أريد أن أجد أقصى قيمة لمستوى جميع الكائنات في المتجه v. لهذا الغرض يمكنني استخدام الوظيفة:

int B::findMaxLevel()
{
vector levels;
vector::iterator it;

for(it=v.begin();it!=v.end();++it)
{
    if(find(levels.begin(), levels.end(), (*it)->getLevel())!=levels.end())
        levels.push_back((*it)->getLevel());
}

return *max_element(levels.begin(), levels.end());

}

ومع ذلك أحصل على الخطأ: فشل التأكيد ، وناقل مكافحة ناقلات لا deferencable. يجب أن أقوم بتعريف مكرر int بالإضافة إلى ذلك؟ هل هناك طريقة أفضل لتنفيذ الوظيفة التي أريدها؟

0
في أي سطر تتلقى رسالة الخطأ هذه؟
وأضاف المؤلف RedX, مصدر
قد يكون محمد على حق جزئيا. يحتوي المتجه v على عناصر بالتأكيد ، لكن يبدو أن العبارة if لن تتحقق ، أيضًا غريبة ، حيث أن كل A لها عضو مستوى.
وأضاف المؤلف arjacsoh, مصدر
حسنا ، مستويات المتجه فارغة لأنني بحاجة إلى == في البحث ، لا! = ، وذلك لإضافة القيمة عندما لا تكون متضمنة في المتجه.
وأضاف المؤلف arjacsoh, مصدر
ماذا تبدو max_element ؟
وأضاف المؤلف Some programmer dude, مصدر
@ محمد آه! مثال جيد على باستخدام مساحة الاسم std ؛ سيئة.
وأضاف المؤلف Some programmer dude, مصدر
ماذا لو كانت v فارغة ، ثم تصبح levels فارغة ، و max_element return levels.end() ؟
وأضاف المؤلف Mohammad, مصدر
وأضاف المؤلف Mohammad, مصدر

2 إجابة

أعتقد أن مشكلتك مع السطر الأخير. سيؤدي متجه فارغ إلى هذا الخطأ على هذا الخط.

في الواقع أنت لا تملأ مستويات على الإطلاق. يجب أن يكون == levels.end() بدلاً من ! = levels.end()

أيضًا ، ألق نظرة على شفرة المثال في هنا ، وحاول استخدام أحد المستخدمين كائن دالة مقارنة محدد بدلاً من نسخ متعددة.

    template 
    ForwardIterator max_element ( ForwardIterator first, ForwardIterator last, Compare comp );
6
وأضاف

This seems like the exact problem you are having with the solution http://www.cplusplus.com/forum/general/18226/

0
وأضاف