קוד: |
#define SIZE_X 40 #define SIZE_Y 25 void init_matrix(char matrix[][SIZE_X]); |
elcuco : | ||
אני מנסה לחדד את ה־C++ המודרני שלי אז אני שואל כא. בגדול יש לי פונקציה שנראית ככה:
אבל זה לא ממש C++. איך אתם ממליצים לי להמיר את זה למשהו יותר מודרני. אין צורך ללכת אל תכנות מונחה עצמים. תודה |
קוד: |
constexpr size_t size_x = 40; constexpr size_t size_y = 25; using TwoDArray = std::array<std::array<char, size_x>, size_y> ; void init_matrix (TwoDArray& matrix); |
קוד: |
TwoDArray make_matrix(); |
elcuco : | ||
אני מנסה לחדד את ה־C++ המודרני שלי אז אני שואל כא. בגדול יש לי פונקציה שנראית ככה:
אבל זה לא ממש C++. איך אתם ממליצים לי להמיר את זה למשהו יותר מודרני. אין צורך ללכת אל תכנות מונחה עצמים. תודה |
borsood : | ||||
איו קשר לתכנות מונחה עצמים. ++C היא הרבה מעבר לשפה מונחית עצמים.
ולשאלתך:
תשקול להחליף את הפונקציה שלך ב
|
קוד: |
typedef std::vector < std::vector < size_t > > matrix_t; void init_matrix (matrix_t && matrix); |
Anonymous : | ||
אם אתה לא יודע כלום למה לא std::vector < std::vector < size_t > > ?
אתה יכול להשתמש בטיפוסים טובים יותר (למשל אם אתה יודע שקיים קשר בין האינדקס של במערך הראשון לגודל המערך שייוצר). שאלו אותך מדוע הגעת לטיפוס הזה מלתחילה ולא ענית |
elcuco : |
מניח שזה המקסימום שאפשר להוציא מהשפה. תודה. |
elcuco : |
סליחה על התגובה המאוחרת...
בגדול, אלו שיעורי בית שנתנו לי (באמצע ראיונות עבודה). נשאלתי שאלה אודות מטריצות, והחלטתי לממש ב-C++ . בסוף מימשתי ב-C. לא מרוצה מהפתרון שלי... ואני מרגיש צורך לשפר. נניח שהגודל של המריצה הוא ניתן לשינוי בזמן ריצה. נניח שהאתול הוא דנאמי (תוכן המטריצה נקרא מתוך קובץ, או מחושב). |
קוד: |
using Row = std::vector<char> ; using TwoDArray = std::vector<Row> ; TwoDArray matrix init_matrix () size_t columns; std::cin >> columns; TwoDArray ret; for (auto i = 0u; i < columns; ++i) { size_t rowSize; rowSize << std::cin; Row row(rowSize); // איתחול השורה בערכים אם צריך ret.emplace_back(row); } return ret; } |