תכנות תבניתי C++ - תכנות - HWzone פורומים
עבור לתוכן
  • צור חשבון

תכנות תבניתי C++


נעמה.

Recommended Posts

לא הבנתי.

אני נמצאת עכשיו בתכנית הראשית.

יש לי שני מערכים מהסוג Vector <int >num ואני צריכה לשלוח אותם לפוקציה שתמזג בינהם.

אם זה היה מערכים רגילים הייתי קוראת לפונקציה ( mizug(num1,num2 אבל עכשיו איך עושים??????? לא צריך מצביעים וכד'?

:nixweiss:לילה טוב.

קישור לתוכן
שתף באתרים אחרים

אולי תצהירי על המערכים הללו מחוץ לכל הפונקציות (עם ה INCLUDE שלפני הפונ' וה MAIN).

ככה המערכים הללו יוגדרו ככלליים שלר שייכים לשום פונ'

אני חייב גם לציין שאני לא ככ מתקדם ב C++ אז קחי את הדברים שלי באופן מוגבל, למרות שאת האופציה הספציפית הזאת ניסיתי.

בהצלחה!

קישור לתוכן
שתף באתרים אחרים

vector<int> num1,num2;

doSomeThings(num1);

soSomeThings(num2);

vector<int>num3 = merge(num1,num2);

הקוד הזה יעבוד והוא תקין ב c++ (בהנחה והפונקציות מוגדרות). מה שעשיתי כאן זה לשלוח את הוקטורים (num1,num2) עצמם (כלומר by value), שליחה זו תפעיל את ה copy constructor של מחלקה וקטור וכן ה type (במקרה זה int) בגלל שלשניהם יש/לא צריך (בהתאמה) copy constructor את יכולה לשלוח את המשתנים כמו שכתבתי. בשורה האחרונה אני עושה השמה של ערך מוחזר (וקטור) לתוך ווקטור אחר, כאן מופעל assinment operator של וקטור (שקיים) ו copy constructor של הtype (שכאמר, עבור משץנה פרימיטיבי int לא קיים ואין בו צורך). לכן גם פעולה זו חוקית.

ישנה עוד דרך והיא לשלוח פוינטר, ואז שליחת המשתנים היא by reference. במקרה כזה הטיפול הוא קצת שונה אבל בעקרון מאד דומה.

vector<int>* num1,*num2;

.....

.....

vector<int>* num3 = merge(num1,num2);

ההבדלה יהיה בגישה למתודות של האובייקטים (הוקטורים) ובאיתחולם.

אם קודם כתבת

vector<int> num1(6);

כעת תכתבי

vector<int>* num1 = new vector<int>(6);

אם קודם כתבת

num1.at(i);

כעת תכתבי

num1->at(i)

... טוב, אני מקווה שהרעיון מובן.

מטי.

קישור לתוכן
שתף באתרים אחרים

ארכיון

דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.

×
  • צור חדש...