我如何在二维向量中存储一些数组

how I can store some arrays in a 2 dimension vector?

本文关键字:向量 存储 数组 二维      更新时间:2023-10-16

我在每次迭代中都有一个循环,打印一个数组。 现在我需要这个数组,所以我想将它们放在二维向量中。我写了这段代码,但我不知道为什么它不起作用!

当我运行时,它不会打印任何东西,也不会显示任何错误!

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=(1,0,0)

第二次迭代:B=(0,1,0)

第三次迭代:B=(0,0,1)

现在我想拥有:

V={{1,0,0},{0,1,0},{0,0,1}}

假设您有 N 个 int[N] 个值,并且需要 1 个vector<vector<int>>值。

std::vector<int> fromArray(int (&B)[N])
{
    return { std::begin(B), std::end(B) };
}

这是一个将一维数组转换为一维向量的函数。 您将需要调用它 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

如果猜测,有一个我的实现:

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

你可能想要这个:

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