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

时间:2017-11-03 12:42:25

标签: c++

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

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

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}}

3 个答案:

答案 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