02-10-2006, 23:14
|
|
|
|
חבר מתאריך: 15.08.06
הודעות: 465
|
|
בשביל זה יש לך
רשימות.
כמו כן, יש לך בספרייה הסטנדרטית וקטורים ורשימות (lists) שמטפלים בהקצאת זיכרון למטרות אלה בצורה נוחה...
בשביל להגדיר רשימה מקושרת חד כיוונית, תצהיר על מבנה שמכיל את כל המידע שאתה רוצה + מצביע לעצמו. תקצה זיכרון לעוגן, בצורה כזאת
קוד:
struct Mylist{
//All your data...
struct Mylist *next_item
};
struct Mylist *first_item;
first_item=malloc(sizeof(struct Mylist));
if (!first_item)
//that means the allocation has failed to accure...
//...
בכל פעם שתרצה להוסיף איבר, תצטרך להקצות לו זיכרון בצורה דינאמית כנ"ל
עם וקטורים, תוכל לעשות משהו כזה
קוד:
//#include <vector>...
vector<Datatype> name(number of items);
אתה פונה אל name[i] כמו שאתה מתייחס למערך..//
אפשר לשנות את מס' האיברים כך//
name.resize(size);
חפש בגוגל על כל הפונקציות של המחלקה...//
כנ"ל, בCPP יש לך list
קוד:
//#include <list>...
list<type> name;
list.push_front(a); //a to the begining
name.push_back(a); //a to the end
list.insert(index, a); //inserts a before index...
כמובן שתמיד תוכל להקצות מקום בזיכרון למערך דינאמי, ולכתוב את ממשק העתקת המידע לבדך...
בC:
קוד:
Type *arr;
if(!arr=(Type *)malloc(NumberOfItems*sizeof(Type))) { //if the allocation failed...}
תוכל להקצות זיכרון לגודל מערך החדש שאתה רוצה, לאתחל אותו באיברי המערך הקודם ואז למחוק את הקודם
נ.ב.
בCPP אתה מקצה עם pointer = new <datatype>...
לגבי מחיקה, בסי++ תשתמש ב
delete name
בC, תשתמש ב
free(pointername);
_____________________________________
Any sufficiently advanced bug is indistinguishable from a feature
נערך לאחרונה ע"י ם_O בתאריך 02-10-2006 בשעה 23:36.
|