一维数组赋值给二维数组---单个循环赋值---memcpy赋值

文章介绍了如何在C++中使用单次循环逐个赋值以及memcpy函数将一维数组转换为二维矩阵,展示了两种不同的赋值策略并给出了示例代码。
摘要由CSDN通过智能技术生成

一, 逐个点的赋值(单个循环)

一维数组又[56],是一个30个元素的数组,将他赋值给一个[56]五行六列的二维矩阵中,一位数组和二维矩阵的
坐标转换:[i/列数][i%列数]

	// 赋值给二维矩阵
	// i从0~一维数组个个数,仅一个循环
	for (int i = 0; i < rows * cols; i++)
	{
		matrix[i / cols][i % cols] = one_matrix[i];  坐标转换[i/列数][i%列数]
	}

示例:

int main()
{
	int rows = 5; // 行数
	int cols = 6; // 列数
	int* one_matrix = new int[rows * cols];  // 申请一维数组空间
	for (int i = 0; i < rows * cols; i++)
	{
		one_matrix[i] = i;
	}

	std::vector<std::vector<int>> matrix;
	matrix.resize(rows,std::vector<int>(cols)); // 申请二维数组空间
	// 赋值给二维矩阵
	for (int i = 0; i < rows * cols; i++)
	{
		matrix[i / cols][i % cols] = one_matrix[i];  // 坐标转换[i/列数][i%列数]
	}
	// 打印查看
	for (int i = 0; i < rows ; i++)
	{
		for (int j = 0; j < cols ; j++)
		{
			std::cout << matrix[i][j] << " ";
		}
		std::cout << std::endl;
	}


	delete[] one_matrix;
	return 0;
}

打印查看
0 1 2 3 4 5
6 7 8 9 10 11
12 13 14 15 16 17
18 19 20 21 22 23
24 25 26 27 28 29

二,使用memcpy方式赋值

	// 使用memcpy进行赋值
	for (int i = 0; i < rows; i++)
	{
		memcpy(matrix[i].data(), &one_matrix[i * cols], cols * sizeof(i));
		// 或者
		memcpy(&matrix[i][0], &one_matrix[i * cols], cols * sizeof(i));
	}
int main()
{
	int rows = 5;
	int cols = 6;
	int* one_matrix = new int[rows * cols];
	for (int i = 0; i < rows * cols; i++)
	{
		one_matrix[i] = i;
	}

	std::vector<std::vector<int>> matrix;
	matrix.resize(rows,std::vector<int>(cols));
	
	// 使用memcpy进行赋值
	for (int i = 0; i < rows; i++)
	{
		memcpy(matrix[i].data(), &one_matrix[i * cols], cols * sizeof(i));
		// 或者
		memcpy(&matrix[i][0], &one_matrix[i * cols], cols * sizeof(i));
	}

	//打印查看
	for (int i = 0; i < rows ; i++)
	{
		for (int j = 0; j < cols ; j++)
		{
			std::cout << matrix[i][j] << " ";
		}
		std::cout << std::endl;
	}
	delete[] one_matrix;
	return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值