אוקיי אני צריך להסביר
בקורס ראשוני לא לומדים את הפרטים הקטנים. לומדים קונספטים. מקבלים הסבר מהו array ומהן הפעולות שעובדות עליו. עכשיו אבקשכם לנסות להסביר מה ההבדל מבחינה קונספטואלית - לא STL ולא iterators - בין שתי מקטעי הקוד הבאים.
מבחינה קונספטואלית - לא קיימים הבדלים. כל העניין הוא לנסות לברור מהם הכלים המובנים בספריה הסטנדרטית שיקלו על תלמיד מתחיל. וקטור הוא מועמד מתאים בהחלט. כנ"ל string. קחו למשל משימה פשוטה של מיון שורות של קובץ טקסט לא חייבים להכנס ל generic programming כדי להבין קוד כזה:
קוד כזה הרבה יותר קל להבנה מהפתרונות המוצעים ב-C למשל. אין בו קשיים קונספטואליים מיוחדים והוא גם הרבה יותר נכון. אני לא חושב שתלמידים צריכים ללמוד בסדר שאני למדתי (אחרת היו מתחילים ב FORTRAN המסכנים). כל העניין הוא בחירה נכונה של מה להציג ובאיזה סדר. בכל מקרה וקטור וסטרינג קלים יותר מ array ו-*char, נכונים יותר כמעט תמיד ואין בהם קשיים קונספטואליים גדולים יותר.
בקורס ראשוני לא לומדים את הפרטים הקטנים. לומדים קונספטים. מקבלים הסבר מהו array ומהן הפעולות שעובדות עליו. עכשיו אבקשכם לנסות להסביר מה ההבדל מבחינה קונספטואלית - לא STL ולא iterators - בין שתי מקטעי הקוד הבאים.
// Segment 1 // vector<int> v(1000); for (int i = 0; i < v.size(); ++i) v = i; // Segment 2 // int array[SIZE]; for (int i = 0; i < SIZE; ++i) array = i;
מבחינה קונספטואלית - לא קיימים הבדלים. כל העניין הוא לנסות לברור מהם הכלים המובנים בספריה הסטנדרטית שיקלו על תלמיד מתחיל. וקטור הוא מועמד מתאים בהחלט. כנ"ל string. קחו למשל משימה פשוטה של מיון שורות של קובץ טקסט לא חייבים להכנס ל generic programming כדי להבין קוד כזה:
string line; vector<string> lines; while (getline(in, line)) lines.push_back(line); sort(lines.begin(), lines.end()); for (int i = 0; i < lines.size(); ++i) cout << lines << endl;
קוד כזה הרבה יותר קל להבנה מהפתרונות המוצעים ב-C למשל. אין בו קשיים קונספטואליים מיוחדים והוא גם הרבה יותר נכון. אני לא חושב שתלמידים צריכים ללמוד בסדר שאני למדתי (אחרת היו מתחילים ב FORTRAN המסכנים). כל העניין הוא בחירה נכונה של מה להציג ובאיזה סדר. בכל מקרה וקטור וסטרינג קלים יותר מ array ו-*char, נכונים יותר כמעט תמיד ואין בהם קשיים קונספטואליים גדולים יותר.