我有几个看起来像这样的数据:
Vector1_elements = T,C,A Vector2_elements = C,G,A Vector3_elements = C,G,T ..... up to ... VectorK_elements = ... #Note also that the member of each vector is always 3.
我想做的就是通过VectorK在Vector1中创建元素的所有组合。因此,最终我们希望获得此输出(使用Vector1,2,3):
TCC TCG TCT TGC TGG TGT TAC TAG TAT CCC CCG CCT CGC CGG CGT CAC CAG CAT ACC ACG ACT AGC AGG AGT AAC AAG AAT
我现在遇到的问题是我的以下代码通过对循环进行硬编码来做到这一点。由于向量的数量可以变化,因此我们需要一种灵活的方法来获得相同的结果。有没有?
我的此代码最多只能处理3个向量(硬编码):
#include <iostream> #include <vector> #include <fstream> #include <sstream> using namespace std; int main ( int arg_count, char *arg_vec[] ) { vector <string> Vec1; Vec1.push_back("T"); Vec1.push_back("C"); Vec1.push_back("A"); vector <string> Vec2; Vec2.push_back("C"); Vec2.push_back("G"); Vec2.push_back("A"); vector <string> Vec3; Vec3.push_back("C"); Vec3.push_back("G"); Vec3.push_back("T"); for (int i=0; i<Vec1.size(); i++) { for (int j=0; j<Vec2.size(); j++) { for (int k=0; k<Vec1.size(); k++) { cout << Vec1[i] << Vec2[i] << Vec3[k] << endl; } } } return 0; }
这将达到目的:
void printAll(const vector<vector<string> > &allVecs, size_t vecIndex, string strSoFar) { if (vecIndex >= allVecs.size()) { cout << strSoFar << endl; return; } for (size_t i=0; i<allVecs[vecIndex].size(); i++) printAll(allVecs, vecIndex+1, strSoFar+allVecs[vecIndex][i]); }
致电:
printAll(allVecs, 0, "");