PDA

View Full Version : حرفه ای: سوال در مورد تعریف آرایه ای با طول نا مشخص



mahdi-1
چهارشنبه 08 آبان 1392, 17:01 عصر
سلام
حرفه ای ها جواب بدن:
چه طور میشه یک آرایه ای رو تعریف کرد که طولش هر بار که داده اضافه میشه بیشتر بشه و مقادیر قبلی از بین نره.
یعنی الگوریتمش اینطوری باشه که تا زمانی که مقدار ورودی به آرایه علامت@ نباشد ذخیره کن وگرنه همه را چاپ کن.
من خودم با آرایه ای از نوع اشاره گر امتحان کردم که تو حلقه while هر بار یه فضا به عنصر جدید بده و مقدار رو توش قرار بده ولی نشد.
فقط نمیخوام اول یه آرایه با 1000000 عنصر تعریف کنم بلکه میخوام به اندازه عناصر ورودی حافظه اشغال بشه.
(بدون vector)

UfnCod3r
چهارشنبه 08 آبان 1392, 17:20 عصر
بهترین راحش اینه که شما هر دفعه که ی ایتم اضافه میکنی بررسی می کنی اگه ارایه جا نداره به تعداد مثلا 10 ایتم فضای حافظه بیشتر بشه .
نمونه :

template < typename Type> class Vector
{
Type* m_elements;
uint m_length;
uint m_capacity;

Vector()
{
m_elements = nullptr;
m_length = 0;
m_capacity = 0;
}
void extendBuffer(uint size)
{
m_capacity += size;
if(m_elements)
m_elements = (Type*)::realloc(m_elements, m_capacity * sizeof(Type));
else
m_elements = (Type*)::malloc(m_capacity * sizeof(Type));
}
void push(const Type& value)
{
if(m_length == m_capacity) extendBuffer(32);
new (m_elements + m_length) Type(value);
m_length++;
}
void pop()
{
m_length--;
}
}

mahdi-1
چهارشنبه 08 آبان 1392, 22:47 عصر
بهترین راحش اینه که شما هر دفعه که ی ایتم اضافه میکنی بررسی می کنی اگه ارایه جا نداره به تعداد مثلا 10 ایتم فضای حافظه بیشتر بشه .
نمونه :

template < typename Type> class Vector
{
Type* m_elements;
uint m_length;
uint m_capacity;

Vector()
{
m_elements = nullptr;
m_length = 0;
m_capacity = 0;
}
void extendBuffer(uint size)
{
m_capacity += size;
if(m_elements)
m_elements = (Type*)::realloc(m_elements, m_capacity * sizeof(Type));
else
m_elements = (Type*)::malloc(m_capacity * sizeof(Type));
}
void push(const Type& value)
{
if(m_length == m_capacity) extendBuffer(32);
new (m_elements + m_length) Type(value);
m_length++;
}
void pop()
{
m_length--;
}
}

داداش گفتم بدون vector
با اشاره گر به آرایه

rahnema1
پنج شنبه 09 آبان 1392, 00:18 صبح
برای ایجاد آرایه از malloc یا calloc استفاده کن و برای افزایش حجم آن در عین اینکه مقدارهای قبلی هم باقی بمانند از realloc استفاده کن