20-02-2014, 22:06
|
|
|
|
חבר מתאריך: 14.12.09
הודעות: 9,751
|
|
ציטוט:
במקור נכתב על ידי fap
טוב, ניצחת.
אני צריך ללמוד c++11 קצת יותר.
|
דווקא std::sort קיים ב-C++98 והיה ב-STL המקורי של SGI.
פשוט כל עוד לא היו לך למבדות היית צריך לכתוב פונקציה ממש או functor בצורה קצת יותר verbose (כלומר: מחלקה ו-operator() שמקבל שני פרמטרים מסוג הדבר שמשווים ומחזיר bool).
std::iota זה חדש ב-C++11 (אפילו שגם זה היה ב-STL של SGI; משום מה זה לא נכנס ל-C++98...), אבל קל לעשות את זה בלעדיה, לדוגמה ככה:
קוד:
std::vector<int> b(a.size());
std::generate_n(begin(b), b.size(), [&i] { static int i = 0; return i++; });
אם יש לך מימוש טוב שלא מקצה זיכרון לוקטור לפני שצריך, אפשר לכתוב פונקציה מגניבה שחוסכת את האתחול הכפול שיש בדוגמה למעלה (קודם לאתחל את הוקטור באפסים, ואז לשים את הערכים של iota), ככה:
קוד:
std::vector<int> create_iota(size_t size)
{
int value = 0;
std::vector<int> v(0);
v.reserve(size);
std::generate_n(std::back_inserter(v), size, [&value] { return value++; });
return v;
}
גגג
_____________________________________
(קרדיט למרשי)
אמר לה ינאי מלכא לדביתיה אל תתיראי מן הפרושין ולא ממי שאינן פרושין אלא מן הצבועין שדומין לפרושין שמעשיהן כמעשה זמרי ומבקשין שכר כפנחס
אמר פסטן: שניהם גרועים, אבל עדיף להיות טיפש מאשר שקרן.
|