Problem

1/1

آرایه دینامیک: شروع

Theory Click to read/hide

آرایه های پویا
در دوره های قبلی در مورد آرایه ها، ما به ایجاد یک آرایه مانند این نگاه کردیم:
 
const int Nmax = 1000; int A[Nmax]; یا این: intA[1000];
این روش یک آرایه استاتیک ایجاد می کند. یکی از معایب این است که اندازه و نوع عناصر آرایه را نمی توان در حین اجرای برنامه تغییر داد. 
در مثال بالا، یک آرایه ثابت از 1000 عنصر ایجاد شده است. یعنی یک ناحیه در حافظه برای ذخیره 1000 عنصر از نوع int (آرایه ای از 1000 عنصر از نوع int) اختصاص داده می شود. آدرس ابتدای آرایه در متغیر  A ذخیره می شود. اگر نیاز به پردازش آرایه ای از بیش از 1000 عنصر دارید، باید توضیحات را تغییر دهید و دوباره برنامه را کامپایل کنید. هنگام کار با آرایه های کوچک، بیشتر حافظه اختصاص داده شده برای یک آرایه استاتیک تلف می شود.

برای استفاده بهینه از حافظه کامپیوتر، لازم است آن را به صورت پویا تخصیص دهیم. به عبارت دیگر، حافظه برای اشیا باید در حین اجرای برنامه در صورت نیاز (ایجاد اشیاء جدید) تخصیص داده شود.

در C++، عملیات  new و حذف برای ​​تخصیص پویا حافظه کامپیوتر طراحی شده است.  عملیات جدید  حافظه را از ناحیه حافظه آزاد تخصیص می دهد و عملیات delete حافظه اختصاص داده شده را اختصاص می دهد. 
 
نمونه ای از ایجاد و حذف یک متغیر پویا
int *A = int جدید; // یک شی از نوع int ایجاد کنید *A = 15; // مقداردهی اولیه شی از طریق یک اشاره گر (*) انجام می شود // مقداردهی اولیه را می توان بلافاصله انجام داد // هنگام اعلان یک شی پویا int *B = new int(25); cout << *الف << " " << *B; // مقدار خروجی را با اشاره گر حذف A; // حافظه اختصاص داده شده را آزاد کرد حذف B; عملیات new یک شی از نوع داده شده ایجاد می کند، حافظه را برای آن اختصاص می دهد و یک اشاره گر از نوع صحیح را به محل حافظه داده شده برمی گرداند. اگر حافظه را نتوان تخصیص داد، برای مثال، اگر مناطق آزاد وجود نداشته باشد، یک اشاره گر تهی برگردانده می شود، یعنی نشانگر مقدار 0 را برمی گرداند. تخصیص حافظه برای هر نوع داده امکان پذیر است: int ، float ، دوبل، char و غیره.

به همین ترتیب، در C++ می‌توانید یک آرایه پویا ایجاد کنید که از تخصیص حافظه پویا استفاده می‌کند. اندازه چنین آرایه ای که می تواند در حین اجرای برنامه مثلاً از صفحه کلید برای ایجاد متغیرهای پویا استفاده شود.
 
در نحو C
intN; scanf("%d", &N); int *mas = malloc (sizeof(int) * N); // بعداً برای تغییر اندازه آرایه // توسط realloc استفاده می شود. ... رایگان (mas); // حافظه اختصاص داده شده را آزاد کنید
در نحو C++
intN; cin>> N; int*A = int[N] جدید; // برای تغییر اندازه آرایه، می توانید // داده ها را به آرایه دیگری منتقل کنید و آرایه قدیمی را پاک کنید ... حذف []mas; // حافظه اختصاص داده شده را آزاد کنید // براکت نشان می دهد // که ما حافظه را از زیر آرایه آزاد می کنیم

Problem

دنباله ای از اعداد صحیح به شما داده می شود. برنامه ای بنویسید که یک آرایه ایجاد کند و یک دنباله را دو بار پشت سر هم روی آن بنویسد.
 
ورودی 
اولین شماره داده شده N — تعداد عناصر در دنباله (1<= N <= 100). سپس اعداد N جدا شده با فاصله نوشته می شوند.
 
خروجی 
خروجی یک آرایه متشکل از یک دنباله تکراری ضروری است.
 
نمونه‌ها
<سر> <بدن>
# ورودی خروجی
1 3
1 2 3
1 2 3 1 2 3