我在每个迭代中都有一个循环打印一个数组。现在我需要这个数组,所以我想把它们放在一个二维向量中。我写了这段代码,但我不知道为什么它不起作用!
当我运行它时不会打印任何东西而且它不显示任何错误!
int main() {
int i, u;
const int j = 9;
vector<vector<int>> V;
int B[9] = {};
for (int r = 0; r<10; r++) {
B[r] = 1;
for (int t = 0; t<V.size(); t++) {
for (int w = 0; w<j; w++, u++) {
V[t][w] = B[u];
}
}
}
for (int m = 0; m<V.size(); m++) {
for (int k = 0; k<j; k++) {
cout << "V=" << " " << V[m][k];
}
}
return 0;
}
例如,在每个迭代B的第一个循环中,B更改,我想将所有这些存储在矩阵中!例如,我有:
首次迭代:B =(1,0,0)
第二次迭代:B =(0,1,0)
第三次迭代:B =(0,0,1)
现在我想要:
V={{1,0,0},{0,1,0},{0,0,1}}
答案 0 :(得分:2)
假设您有N int[N]
个值,并且您想要1 vector<vector<int>>
个值。
std::vector<int> fromArray(int (&B)[N])
{
return { std::begin(B), std::end(B) };
}
这是一个将1D数组转换为1D向量的函数。你需要打电话N次。
std::vector<std::vector<int>> fromArrays(int (&Bs)[N][N])
{
std::vector<std::vector<int>> result{ N };
std::transform(std::begin(Bs), std::end(Bs), result.begin(), fromArray);
return result;
}
这里我们采用2D数组并将其转换为2D矢量。这要求您将所有B
放在一起。
int main()
{
constexpr int N = 3;
std::vector<std::vector<int>> V;
for (int i = 0; i < N; ++i)
{
int B[N] = {};
B[i] = 1;
V.emplace_back(fromArray(B));
}
for (std::vector<int> & v : V)
{
for (int i : v)
{
std::cout << i << " ";
}
std::cout << "\n";
}
return 0;
}
或者,如果您没有同时拥有所有B
,只需循环N次,即可获得一个B
答案 1 :(得分:0)
你可能想要这个:
int main() {
const int Bsize = 9;
const int NumberOfLines = 4; // number of iterations
int B[Bsize] = { 1,2,3,4,5,6,7,8,9 };
vector<vector<int>> V;
V.resize(NumberOfLines);
int bIndex = 0;
for (int r = 0; r < NumberOfLines; r++) {
// add code that changes B here
V[r].resize(Bsize);
for (int w = 0; w < Bsize; w++) {
V[r][w] = B[w];
}
}
for (int m = 0; m < V.size(); m++) {
for (int k = 0; k < V[m].size(); k++) {
cout << " " << V[m][k];
}
cout << endl;
}
return 0;
}
在此示例中,我们将生成4行(每次迭代一行),但B
每次都相同。如果您希望B在每次迭代之间进行更改,则需要插入更改B
的相应代码。
样本的输出将是:
1 2 3 4 5 6 7 8 9
1 2 3 4 5 6 7 8 9
1 2 3 4 5 6 7 8 9
1 2 3 4 5 6 7 8 9
答案 2 :(得分:0)
如果猜测,有一个我的实现:
int main() {
int len = 9;
int div = 3;
int total = len / div;
int B[len]={1, 0, 0, 0, 1, 0, 0, 0, 1};
vector<vector<int> > V(total);
int cnt = 0;
for (int i = 0; i < len && cnt < total; i += div) {
for (int j = i; j < i + div; j++) {
V[cnt].push_back(B[j]);
}cnt++;
}
for (int i = 0; i < total; i++) {
for (int j = 0; j < V[i].size(); j++) {
cout << V[i][j] << " ";
}cout << endl;
}
return 0;
}
V是这样的:
1 0 0
0 1 0
0 0 1