【发布时间】:2018-12-04 16:37:46
【问题描述】:
假设我有一个vector<vector<vector<int> > > result。
我之前知道的唯一大小是内部和外部向量,大小为k。
如果我打印 result 我得到这个(k = 3):
i = 0
0 1 2
3 4 5
i = 1
6 7 8
9 10 11
12 13 14
i = 2
15 16 17
18 19 20
我需要做的是从i 的向量的每个向量中打印k 行的每个组合。换句话说,我需要的是以下输出:
0 1 2
6 7 8
15 16 17
0 1 2
6 7 8
18 19 20
0 1 2
9 10 11
15 16 17
...
3 4 5
12 13 14
18 19 20
希望我清楚所需的输出。我已经尝试了一千个不同的循环,试图保存另一个vector<vector<int> >,但到目前为止没有成功。我真的很迷茫,任何帮助都会非常感激。
生成上述输出的代码在这里:
(对不起,我知道这是一个丑陋的代码,但它是我能在 MCVE 代码中展示我的问题的最接近的代码)
#include <iostream>
#include <vector>
using namespace std;
int main(){
vector<vector<vector<int> > > result;
int k = 3;
vector<vector<int> > randomVectors;
//I'll create seven random vectors
//In my original problem, I don't have this number beforehand
int number = 0;
for(int i = 0; i < 7; i++){
vector<int> temp;
for(int j = 0; j < k; j++){
temp.push_back(number);
number++;
}
randomVectors.push_back(temp);
}
//Vector of vector to assign to "result"
vector<vector<int> > randomVectors_0;
randomVectors_0.push_back(randomVectors[0]);
randomVectors_0.push_back(randomVectors[1]);
vector<vector<int> > randomVectors_1;
randomVectors_1.push_back(randomVectors[2]);
randomVectors_1.push_back(randomVectors[3]);
randomVectors_1.push_back(randomVectors[4]);
vector<vector<int> > randomVectors_2;
randomVectors_2.push_back(randomVectors[5]);
randomVectors_2.push_back(randomVectors[6]);
result.push_back(randomVectors_0);
result.push_back(randomVectors_1);
result.push_back(randomVectors_2);
cout << "Printing the 3D vector" << endl;
for(int i = 0; i < k; i++){
cout << "i = " << i << endl << endl;
for(int j = 0; j < result[i].size(); j++){
for(int m = 0; m < k; m++){
cout << result[i][j][m] << " ";
}
cout << endl;
}
cout << endl;
}
return 0;
}
编译器版本:gcc (tdm-1) 4.7.1
【问题讨论】:
-
我建议你用元素
100*i + 10*j + k填充数组,然后你可以简单地从预期的输出中读出你需要的循环 -
我不明白你的建议@user463035818。你能再解释一下吗?
-
问题是我不理解您的预期输出,只有当您知道元素如何存储在向量中时才有意义,例如,值为
19的元素在什么索引处?如果您使用我建议的值,则值为123的元素是result[1][2][3]。现在,如果你用这些值写下预期的输出,你可以直接读取你需要的循环 -
...或者设为
result[1][2][3] = 234(你不能将0作为前导数字...) -
@user463035818 我使用的数字是随机的。在我原来的问题中,它们可以是任何正整数值。我想要的输出是:得到
i = 0的第一行,然后是i = 1的第一行,然后是i = 2的第一行。此时我形成了一个k x k矩阵。在此之后,我想制作一个不同的矩阵。对不起,我不是很清楚
标签: c++ vector combinations