PDA

View Full Version : نوشتن آرایه دوبعدی داینامیک در mfc



eemajid
جمعه 02 بهمن 1388, 03:05 صبح
با سلام
چگونه می شه در mfc ارایه دو بعدی با طول نامشخص نوشت؟
من یک پروژه ای دارم که در آن طول آرایه من مشخص نیست و از کاربر گرفته می شود
البته یک بعدش ستون 4 تایی هست ولی سطرهاش نا معلوم
می تونم از کلاس CArray رو استفاده کنم؟
این کد چرا موقع کامپایل ایراد نمی گیره اما موقع اجرا error می ده


public::


std::vector <std::vector<double> > P_control

void CCNCDlg::OnBnClickedButtonrp()
{
// TODO: Add your control notification handler code here
P_control[i_control][0]=m_x;
P_control[i_control][1]=m_y;
//P_control[i_control][2]=m_Z;
//P_control[i_control][3]=m_W;

i_control =+ 1;
{




error mesage:

expression:vector subscript out of range

Nima_NF
جمعه 02 بهمن 1388, 12:38 عصر
شما اول باید اطلاعات را در vector بریزید تا یک خانه در vector ایجاد شود و به آن حافظه تخصیص داده شود و سپس از [][] استفاده کنید و محتویات را بخوانید.

مثلا برای دادن اطلاعات باید از push_back استفاده کرد.

طرز کار با وکتور ها مانند آرایه ها نیست و کاملا از هم متفاوت هستند.



P_control[i_control][0]=m_x

std::vector<double> tempVect;

tempVect.push_back(m_x);
// and fill more

// now add it to first vector
P_control.push_back(tempVect);



اگر قرار نیست از ز push_back استفاده کنید باید ابتندا حافظه را رزرو کنید، برای رزرو حافظه نیز باید از resize و reserve استفاده کنید. در غیر این صورت هنگام اجرا خطا دریافت می کنید. (دسترسی به حافظه غیر مجاز)


ضمنا اگر قرار هست با "=" اطلاعات را تغییر دهید، باید از list یا deque استفاده کنید که این قابلیت random access را دارند.

eemajid
جمعه 02 بهمن 1388, 18:58 عصر
ممنون
طرز استفاده CArray چطوریه؟مخصوصا دو بعدی
یک نمونه کد اگه ممکنه بنویسید

Nima_NF
جمعه 02 بهمن 1388, 21:03 عصر
وقتی می خواهید از CArray استفاده کنید، باید با class ها کار کنید، پس برای هر چیزی باید یک کلاس تعریف کنید، مثلا:



class CNumbers {
double x, y;

public:
void setnum (double,double);
};

//------------------
CNumbers mynum1;
mynum.setnum(0,10);

CArray<CNumbers,CNumbers> mylist;

mylist.Add(mynum1);
// mylist.Add(mynum2);
// mylist.Add(mynum3);
// and more if you define them

CArray<CArray, CArray> array2x; // 2x array

array2x.Add(mylist);