c++ - 如何使用指针 C++ 将元素从 2D 数组复制到 1D 数组
问题描述
我有一个功能
double* get_row(double *the_array, int row_num, int col_size)
其中the_array
是 2D 数组,row_num
是 2D 数组上我要从中复制值的行号,并且col_size
是 2D 数组的列大小。
功能实现
double* get_row(double *the_array, int row_num, int col_size) {
double* row = new double[col_size];
for (int i = 0; i < col_size; i++) {
*row = *(*(the_array + row_num) + i);
row++;
}
delete[] row;
return row;
}
我试图将row_num
二维数组的行中的值复制the_array
到一维数组row
中,但编译器在
*row = *(*(the_array + row_num) + i);
我用来将元素从一个数组复制到另一个数组的行上给了我一个错误,完成此类任务的正确方法是什么。
顺便说一句,我从 Visual Studio 得到的错误是:'*' 的操作数必须是一个指针。
感谢您的帮助。
解决方案
为了解决这个问题,我假设“col_size”实际上是“列数”。并且数据按行优先顺序排列。
然后第 N 行的开始位于the_array + row_num*col_size
。
我将从这个辅助函数开始:
inline double* view_row_n( double* array, int row, int num_cols ) {
return array+row*num_cols;
}
然后我会写一个复制缓冲区:
std::unique_ptr<double[]> copy_buffer( double const* in, int count ) {
double* retval = new double[count];
std::memcpy( retval, in, sizeof(double)*count );
return std::unique_ptr<double[]>( retval );
}
现在我将它们一起使用:
double* get_row( double* the_array, int row_num, int col_size) {
auto retval = copy_buffer( view_row_n( the_array, row_num, col_size), col_size );
return retval.release();
}
并完成它。
我也会改变:
double* get_row( double const* the_array, int row_num, int col_size) {
乃至:
std::unique_ptr<double[]> get_row( double const* the_array, int row_num, int col_size) {
但这超出了您的问题范围。
推荐阅读
- vue.js - 在 Vue 中添加 shippingProposal plugin-proposal-private-methods
- android - Kotlin 找不到明确的 Activity 类
- python-3.x - 如何创建动态数量的 PyQT(QPushButton)按钮
- javascript - 从节点红色的世界地图中删除标记的问题
- python - 如何使用 python selenium 接受 facebook cookie?
- c# - 如何模拟函数
构造函数注入C#的参数? - encryption - 解密 AES-256 密码
- android - 无法从“http://services.gradle.org/distributions/gradle-1.10-all.zip”安装 Gradle 发行版
- r - 如果它与第二个数据帧中的值匹配,则 R 替换值
- javascript - 即使在服务器上成功,错误回调也总是触发