تبلیغات :
ماهان سرور
آکوستیک ، فوم شانه تخم مرغی ، پنل صداگیر ، یونولیت
دستگاه جوجه کشی حرفه ای
فروش آنلاین لباس کودک
خرید فالوور ایرانی
خرید فالوور اینستاگرام
خرید ممبر تلگرام

[ + افزودن آگهی متنی جدید ]




صفحه 1 از 2 12 آخرآخر
نمايش نتايج 1 به 10 از 11

نام تاپيک: چطوری یک ارایه ی بدون اندازه ایجاد کنم؟

  1. #1
    داره خودمونی میشه masoud_iq's Avatar
    تاريخ عضويت
    Apr 2007
    محل سكونت
    Esfahan
    پست ها
    79

    پيش فرض چطوری یک ارایه ی بدون اندازه ایجاد کنم؟

    چطوری یک ارایه ی بدون اندازه ایجاد کنم؟

  2. #2
    آخر فروم باز hamidreza_buddy's Avatar
    تاريخ عضويت
    Sep 2004
    محل سكونت
    شریف
    پست ها
    1,167

    پيش فرض

    یک Pointer تغعریف کن و هر وقت لازم بود اندازه ای برای اون در نظر بگیری از malloc استفاده کن.
    اگر هم می خواهی که قادر باشی عنصر جدید به آرایه اضافه کنی باید از صف (Queue) استفاده کنی.
    زبانت C هست یا C++ ؟

  3. #3
    پروفشنال peyman1987's Avatar
    تاريخ عضويت
    Sep 2006
    محل سكونت
    تهران
    پست ها
    995

    پيش فرض

    ميتونين از ليست پيوندي ( linked list ) استفاده کنين.
    اصولا آرايه رو ساختمان داده ثابت و ليست پيوندي رو ساختمان داده پويا در نظر ميگيرن.

  4. #4
    آخر فروم باز hamidreza_buddy's Avatar
    تاريخ عضويت
    Sep 2004
    محل سكونت
    شریف
    پست ها
    1,167

    پيش فرض

    اگر هم می خواهی که قادر باشی عنصر جدید به آرایه اضافه کنی باید از صف (Queue) استفاده کنی.
    منظورم همون Linked List بود که قاط زدم اشتباهی گفتم Queue!

  5. #5
    آخر فروم باز paranoid_android's Avatar
    تاريخ عضويت
    Apr 2007
    محل سكونت
    in My Earphones
    پست ها
    1,414

    پيش فرض

    ساده س. اگه از cpp استفاده میکنی که یه آرایه داینامیک تعریف میکنی.
    اگه هم که از سی شارپ استفاده میکنی، آرایه یه رفرنس تایپه و اندازه مندازه حالیش نیست! یعنی محدودیت نداری. قربون سی شارپ برم با اون مدیریت خودکار حافظه ش

  6. #6
    حـــــرفـه ای
    تاريخ عضويت
    Aug 2006
    پست ها
    793

    پيش فرض

    سلام.
    ساده س. اگه از cpp استفاده میکنی که یه آرایه داینامیک تعریف میکنی.
    ممنون از پاسختون. لطفا سعی کنین پاسخ به صورت کامل باشه. دوستمون در مورد ایجادش پرسیدن.
    اگه در مورد آرایه های Dynamic اطلاع داشتن این سوال مطرح نمیشد.
    همونطور که حمیرضا گفتن در C میتونین از malloc استفاده کنین و در Cpp از new مثلا به شکل زیر :

    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    البته توجه داشته باشین که در پایان برنامه باید حافظه ی تخصیص داده شده رو آزاد کنین.
    میتونین این کار رو با free و یا delete انجام بدین . (بر خلاف #C)
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

    اگه هم که از سی شارپ استفاده میکنی، آرایه یه رفرنس تایپه و اندازه مندازه حالیش نیست! یعنی محدودیت نداری.
    ممکنه در مورد این گفته بیشتر توضیح بدین. هر زمان بخواین به آرایه ای مقدار بدین باید اندازش مشخص باشه.
    مثلا به شکل زیر :

    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    با خط اول در حافظه جایی برای pInt در نظر گرفته میشه. اما طولی نداره و تنها یه آدرس هست.
    که با خط دوم این آرایه با طول 7 در Heap ذخیره میشه. نمونه ی همین روش در Cpp وجود داره و تنها فرقشون
    در مدیرت حافظه هست که شما به اون اشاره کردین.
    مگر در مورد Collection ها (میشه گفت همون Template ها در Cpp) که قضیه در موردش فرق میکنه.



  7. #7
    آخر فروم باز hamidreza_buddy's Avatar
    تاريخ عضويت
    Sep 2004
    محل سكونت
    شریف
    پست ها
    1,167

    پيش فرض

    در سی شارپ ، کلاسی به نام ArrayList وجود دارد که در واقع همون لیست پیوندی هست. این کلاس در namespace به نام System.Collection قرار دارد. می شه به این کلاس object ها را Add کرد و می توان شبیه یک آرایه با آن رفتار کرد. مثلاً با استفاده از اندیس: myArray[i] ;
    ولی در C# آرایه ها باید دارای اندازۀ مشخصی باشند و نمی توان اندازۀ آن را در زمان اجرا افزایش داد. مگر اینکه هنگامی که نیاز بود یک اندازۀ جدید به آن انتساب دهیم و همۀ اعضا را در آن کپی کنیم.

  8. #8
    آخر فروم باز paranoid_android's Avatar
    تاريخ عضويت
    Apr 2007
    محل سكونت
    in My Earphones
    پست ها
    1,414

    پيش فرض

    سلام.

    ممنون از پاسختون. لطفا سعی کنین پاسخ به صورت کامل باشه. دوستمون در مورد ایجادش پرسیدن.
    اگه در مورد آرایه های Dynamic اطلاع داشتن این سوال مطرح نمیشد.
    همونطور که حمیرضا گفتن در C میتونین از malloc استفاده کنین و در Cpp از new مثلا به شکل زیر :

    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    البته توجه داشته باشین که در پایان برنامه باید حافظه ی تخصیص داده شده رو آزاد کنین.
    میتونین این کار رو با free و یا delete انجام بدین . (بر خلاف #C)
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

    ممکنه در مورد این گفته بیشتر توضیح بدین. هر زمان بخواین به آرایه ای مقدار بدین باید اندازش مشخص باشه.
    مثلا به شکل زیر :

    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    با خط اول در حافظه جایی برای pInt در نظر گرفته میشه. اما طولی نداره و تنها یه آدرس هست.
    که با خط دوم این آرایه با طول 7 در Heap ذخیره میشه. نمونه ی همین روش در Cpp وجود داره و تنها فرقشون
    در مدیرت حافظه هست که شما به اون اشاره کردین.
    مگر در مورد Collection ها (میشه گفت همون Template ها در Cpp) که قضیه در موردش فرق میکنه.

    خواهش میکنم. چشم. با تشکر از شما و دوست عزیز someone که نحوه تعریف آرایه دینامیک در سی و سی پی پی رو توضیح دادن.

    اینکه فرمودین: در مورد این گفته که "هر زمان بخواین به آرایه ای مقدار بدین باید اندازش مشخص باشه"، توضیح بدم، منظورتون رو متوجه نشدم. شما تو سی شارپ میتونید آرایه رو بدون تعیین محدوده اون تعریف کنید. ولی به هنگام مقداردهی باید از کلمه کلیدی new استفاده کنین. مثلا به این صورت:

    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    فکر میکنم خودتون هم اشاره کردید که تفاوت اصلی سی پی پی و سی شارپ در همون مدیریت حافظه هست. شما در سی پی پی باید در هنگام استفاده از یه آرایه پویا برای اینکه به هنگام تعریف محدودیتی برای تعیین بعد اون نداشته باشین، از مفهوم اشاره گر استفاده کنین و در نهایت در پایان سیکلی که استفاده از اون ارایه پویا به اتمام میرسه ملزم به آزاد کردن فضای تخصیص یافته به اون آرایه در حافظه هستین. نکته دوم اینکه در سی شارپ اعضای ارایه همه شی به حساب میان و خب مقادیر آبجکت همه رفرنس هستن در نتیجه خود آرایه هم یه رفنس تایپ محسوب میشه. البته در سی شارپ آرایه ای به اسم آرایه دندانه دار یا jagged array هم وجود داره که در واقع آرایه ای از آرایه هاست و بحثش جداست.

  9. #9
    آخر فروم باز paranoid_android's Avatar
    تاريخ عضويت
    Apr 2007
    محل سكونت
    in My Earphones
    پست ها
    1,414

    پيش فرض

    ولی در C# آرایه ها باید دارای اندازۀ مشخصی باشند و نمی توان اندازۀ آن را در زمان اجرا افزایش داد. مگر اینکه هنگامی که نیاز بود یک اندازۀ جدید به آن انتساب دهیم و همۀ اعضا را در آن کپی کنیم.
    فکر میکنم این توضیح در مورد سی پلاس پلاس باشه. نه؟

  10. #10
    حـــــرفـه ای
    تاريخ عضويت
    Aug 2006
    پست ها
    793

    پيش فرض

    دوباره سلام.
    اگه توجه کنین نمونه ای که گذاشتین با نمونه ای که من گذاشتم یکی هست.
    شما گفته بودین :
    اگه هم که از سی شارپ استفاده میکنی، آرایه یه رفرنس تایپه و اندازه مندازه حالیش نیست! یعنی
    محدودیت نداری.
    از جمله شما این طور برداشت میشه که میشه از کد زیر بدون تعیین اندازه استفاده کرد.
    مثلا به این شکل :
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    مشخصه که این کار امکان پذیر نیست. وقتی شما به شکل زیر یه آرایه رو مقدار میدین درسته طولش
    رو صریحا مشخص نمیکنین اما این کار توسط زمان -اجرا برای شما انجام میشه. در حقیقت طول آرایه
    مشخص میشه .وگرنه استفاده از اون امکان پذیر نیست.
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    در اینجا آرایه ای با طول 7 ایجاد میشه.
    ضمنا چنین کاری رو در Cpp هم میشه انجام داد. مثلا :
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    میبینین که شباهت زیادی وجود داره تنها تفاوتشون در این هست که این کد روی Stack ایجا میشه نه Heap.
    در Cpp هم میشه در زمان- اجرا یک آرایه با طول دلخواه ایجاد کرد.

صفحه 1 از 2 12 آخرآخر

Thread Information

Users Browsing this Thread

هم اکنون 1 کاربر در حال مشاهده این تاپیک میباشد. (0 کاربر عضو شده و 1 مهمان)

User Tag List

قوانين ايجاد تاپيک در انجمن

  • شما نمی توانید تاپیک ایحاد کنید
  • شما نمی توانید پاسخی ارسال کنید
  • شما نمی توانید فایل پیوست کنید
  • شما نمی توانید پاسخ خود را ویرایش کنید
  •