PDA

View Full Version : سوال: کپی قسمتی از یک وکتور 2 بعدی



aghayifar
سه شنبه 05 اردیبهشت 1391, 00:01 صبح
سلام خدمت دوستان
بر فرض مثال یک وکتور دو بعدی 10*10 و یک وکتور دو بعدی 3*3 دارم می خواستم داده های از دکتور بزرگه داده های بین مکان 6*6 تا 9*9 که یه ماتریس 3*3 میشه رو در وکتور کوچیک کپی کنم. انجام کار که مشکل نیست با دو تا for تو در تو. اما دنبال راه حلی بودم که با یک for بنویسم و یه جور به جای اینکه دونه دونه کپی کنم بتونم سطر سطر کپی کنم.
نمی دونم همچین چیزی ممکنه؟
مثلا یه بار کل داده های خونه ی 6*6 تا 9*6 کپی میشه بعدش داده های خونه ی 6*7 تا 9*7 یه باره کپی میشه
ممنون میشم اگر روشی وجود داره من رو راهنمایی کنید.

one hacker alone
سه شنبه 05 اردیبهشت 1391, 00:15 صبح
ببين يه باره و سطري امكان پذير نيست چون منطقي اينه كه ما به تك تك خانه ها دسترسي داشته باشيم و عمليات رو انجام بديم اما در مورد اينكه با يه for بنويسي روش فكر كني ميتوني بنويسي اما زياد جالب نميشه چون در حالت عادي ما در هر حلقه از يه شمارنده استفاده ميكنيم اما اگه با يه حلقه بنويسيم بايد حلقه دوم رو يه جورايي با يه سري متغير شبيه سازي كنيم كه زياد شلوغ ميشه
اگه اجباري نيست بيخيال شو اگه حياتي هست دقيق بگو ميخواي چكار كني شايد راهي يافتيم

Ananas
سه شنبه 05 اردیبهشت 1391, 00:19 صبح
سلام.
از تابع Move استفاده کن و یا memcpy.

مصطفی ساتکی
سه شنبه 05 اردیبهشت 1391, 00:53 صبح
به این صورت

void showArray(int* arr,int row,int col)
{

for (int i=0; i < row;i++)
{
int* row = arr + i * col;
for(int j=0 ;j < col;j++)
printf("%d \t", row[j]);
printf("\n");
}

}
void setArray(int* arr,int row,int col)
{

for (int i=0; i < row;i++)
{
int* row = arr + i * col;
for(int j=0 ;j < col;j++)
row[j] = (i * col) + j;

}

}
int _tmain(int argc, _TCHAR* argv[])
{
int a[5][5];
int b[3][3];

setArray((int*)a,5,5);
setArray((int*)b,3,3);
int xPos = 2;
int yPos = 2;
for (int i= yPos; i < yPos+3;i++)
memcpy(&a[i][xPos] ,&b[i-yPos][0],sizeof(int)*3);

showArray((int*)a,5,5);

return 0;
}

aghayifar
چهارشنبه 06 اردیبهشت 1391, 23:13 عصر
دقیقا می خوام اینطوری از توابع آماده استفاده کنم که یه رنجی رو می گیرن و کپی می کنن ولی من از وکتور استفاده کردم نه آرایه، فرق نمی کنه؟

std::vector<vector<int> > data

Ananas
پنج شنبه 07 اردیبهشت 1391, 12:38 عصر
memcpy اطلاعات پشت سرهم مثل آرایه رو کپی میکنه شاید برای vector درست کار نکنه.