מערך דינמי
שיעור 13 מתוך 14 בקורס מצביעים ב-C++ של Coddy.
הודות לתכנות מודרני ולשפות תכנות עיליות, יש לנו מבני נתונים ואלגוריתמים שמבצעים עבורנו עבודות מורכבות בפשטות. יש לנו וקטור, מחסנית, תור וכו׳.
ליתר דיוק, vector ב-C++ הוא מבנה נתונים שמייצג מערך דינמי. אין צורך לאתחל את אורכו; כשמשתמשים בשיטה .push_back(), אורכו משתנה אוטומטית, והאיברים שרוצים להוסיף מתווספים אוטומטית, וכן הלאה.
אבל מאחורי הקלעים, ה-vector משתנה באופן דינמי, וכל השיטות והפונקציות נבנו מראש על ידי מישהו אחר. עם זאת, טוב לדעת כיצד הקצאה דינמית של מערך פועלת.
לדוגמה, נניח שיש לנו מערך. אנחנו יכולים להצהיר עליו ולאתחל את אורכו באמצעות new ולשריין מקום בזיכרון. בהמשך נוכל למלא את המיקומים האלה בזיכרון בערכים הרצויים.
// הקצאת זיכרון עבור 5 מספרים שלמים:
int *array = new int[5];
// מילוי המערך:
for(int i = 0; i < 5; i++)
array[i] = i + 1;
// הדפסה
for(int i = 0; i < 5; i++)
cout << array[i] << " ";
// שחרור הזיכרון
delete[] array;Output:
1 2 3 4 5כפי שאפשר לראות, שריינו באופן דינמי מקום בזיכרון עבור 5 מספרים שלמים, השתמשנו בלולאת for כדי למלא את המקומות האלה בזיכרון, הדפסנו אותם ואז מחקנו את המערך באמצעות delete[] כדי לשחרר את הזיכרון בבטחה ולמנוע דליפות זיכרון.
השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
אתגר
קלבקלט יינתן לך מספר N שמייצג את מספר האיברים במערך. צור באופן דינמי מערך בשם numbers באמצעות מצביע והקצה מקום עבור N מספרים שלמים. בשורת הקלט הבאה יינתנו לך N איברים, קרא כל אחד מהם באמצעות לולאת for, ולבסוף הדפס את כל האיברים במיקומים זוגיים (האינדקס מתחיל ב־0). לבסוף, שחרר את הזיכרון שהקצית בתחילת התוכנית
קלט
5
1 2 3 4 5
פלט
1 3 5
נסו בעצמכם
#include <iostream>
using namespace std;
int main() {
// כתבו כאן קוד
return 0;
};כל השיעורים ביחידה מצביעים ב-C++
תרגלו בעצמכם: קומפיילר C++ אונליין