重新排列二维数组
Re arranging a 2D array
我正在尝试用c++做一些DNA分析。我有一个包含DNA序列的二维字符数组。char input[n][m];
现在根据DNA模式,我对输入数组进行一些处理,并为该模式找到一个新的序列。
假设原始序列是1,2,3,4,5,6
。这是6个DNA(二维数组的行)
处理后我得到订单为1,6,2,4,3,5
。那么我如何按照这个顺序重新排列原始输入数组呢?也就是说,输入的第一行现在应该是第一个DNA,第二行现在应该是原始阵列中的第六个DNA,以此类推。
int main()
{
using namespace std;
char input[t][l] = { {'A','A','A','T','C','A','G','T','A'},
{'A','T','T','A','C','T','G','C','A'},
{'A','G','C','T','A','C','T','G','C'},
{'A','T','T','A','C','T','G','C','A'},
{'A','G','C','T','A','C','T','G','C'}
};
// SOME PROCESSING
Here output array has the elements ={1,6,2,4,3,5}
for (int i = 0; i<t; i++)
{
cout << output[i] << " ";
}
}
任何想法如何改变内存中的地址,以便重新排序原始数组?
这只会移动指针:
char input[5][9] = { {'A','A','A','T','C','A','G','T','A'},
{'A','T','T','A','C','T','G','C','A'},
{'A','G','C','T','A','C','T','G','C'},
{'A','T','T','A','C','T','G','C','A'},
{'A','G','C','T','A','C','T','G','C'}
};
char* output[5];
output[0] = input[3];
output[1] = input[2];
output[2] = input[4];
char test = output[1][3];
如果您不需要就地执行,只需创建新的目标矩阵,将第1行复制到第1行,将第6行复制到第2行,以此类推…只使用输出[i]作为原始矩阵行索引。
有了更多的簿记,它当然也可以在适当的地方完成。好吧,如果你需要就地取材,我会这样做:您有[源行][目标行]的配对列表,如:
[1] & lt; [1],[2] & lt; [6],[3] & lt; [2],…
创建描述复制操作的映射。那就从1开始。
[1]<-[1]很容易。(你可以把它从地图上删除)
[2]<-[6]覆盖原来的第2行,这是下一步需要的。交换第2行和第6行。现在,第6行是正确的位置,但是您需要更改映射。您需要将mapping [3]<-[2]更改为[3]<-[6],使用类似于map[2]=6.
直到完成
我个人会使用vector<string> input
和
vector<double> output_list (t,0); // length t, initialized to 0
// assign the values of output_list
for (int i = 0; i<t; i++)
{
cout << input[output_list[i]] << " ";
}
请注意,此解决方案不需要额外的内存(没有第二个2D数组)也不需要额外的计算时间(您不交换数据,您只需调用您需要的部分)
如果你绝对需要重新排序数组(正如我在你的评论中注意到的),你可以根据需要多次swap(input[i],input[j])
。
- 将值从二维数组输出到文本文件
- 在二维数组中查找最小值和最大值?
- 移动二维数组中的字符
- 如何正确填充在堆上分配的二维数组?
- 传递二维数组时出现问题
- 具有随机数的二维数组不会更改
- 如何在C++中获取二维数组中最少的一列数?
- 如何使用用户输入变量制作二维数组?
- C++ 中动态二维数组的访问冲突
- 遍历二维数组的所有子数组
- 将二维数组的所有元素插入到一维数组中
- 在函数中传递二维数组
- 为什么指针在对二维数组进行排序时无法正常工作?
- 创建 std::string 的二维数组的最佳做法
- 如何将文本文件读取到二维数组中并以 c++ 打印
- 元素在二维数组 c++ 中的出现次数
- 执行 c++ 二维数组
- C++ 中的二维数组初始化为一个值
- 在C++中初始化第一维大小未知的二维数组
- 重新排列二维数组