【发布时间】:2018-06-19 08:15:02
【问题描述】:
我正在开发一个程序,该程序将初始向量作为 inpit。此向量的大小为 20。程序然后从该向量生成 10 个随机向量。为此,我在初始向量中选择 2 个赎金索引,然后将它们相互交换以生成一个新向量。这样做是为了生成所有 10 个新向量。 生成的10个新向量应该存储在下面的二维向量中
vector<vector<int>> allparents
我已经能够使用 srand() 函数生成 2 个随机索引数,然后将这些索引处的元素交换为初始向量。但是我无法生成 10 个这样的随机父项,然后将它们存储在所有父项中二维向量。我的代码如下:
#include<vector>
#include<iostream>
#include<algorithm>
#include<cstdio>
#include<ctime>
using namespace std;
int main () {
srand(time(NULL));
int i1=(rand()%19+1);
int i2=(rand()%19+1);
cout<<i1<<endl;
cout<<i2<<endl;
vector<int> initial={71,127,428,475,164,253,229,395,92,189,41,110,443,490,278,305,28,58,371,560};
vector<vector<int>> allparents;
for(int r=0;r<10;r++){
for(int c=0;c<20;c++){
swap(initial[i1],initial[i2]);
allparents[r][c]=initial[c];
cout<<allparents[r][c]<" "<<endl;
}
}
return 0;
}
由于我是矢量新手,因此我希望您在此程序中提供帮助。谢谢。
【问题讨论】:
-
vector<vector<int>> allparents[10][20];这是一个 2dim-array 的向量向量,所以你最终得到 4 个维度。你确定这是你需要的吗? -
@KarstenKoop 是的,我确定,我需要一个包含 10 个其他向量的向量。这 10 个向量中的每个向量应该包含 20 个元素。
-
是的,但是现在您有了向量数组的数组,这使它成为 4-dim 而不是 2-dim。要创建大小为 20 的向量,不要使用
std::vector v[20],而是使用std::vector v(20)。 -
i1和i2在for循环中是不变的,所以对swap的调用只是来回交换它们。对rand()的调用应该在循环内。 -
rand()%19+1是一种在 [1, 19] 范围内生成伪随机数的方法(旧且有点偏颇)。这是你的意图吗?跳过索引 0?我可以建议您正确缩进您的代码吗?这是捕获常见错误的一种非常简单的方法。