如何在不知道宽度的情况下将元素存储在二维向量中?

How to store elements in 2d vector without knowing his width?

我有一个一维向量

std::vector<int> vec1 = {4, 5, 6, 7};

我想将这些元素存储在二维向量中

std::vector<std::vector<int>> vec2;

但是 vec2 的高度只能是 3 而我在 vec1 中有 - 4 个元素。

vec2 的输出应该是:

4 7
5
6

也许我没有完全理解这个问题,但是我理解的可以通过1个简单的for循环来实现。请考虑到,我们只有 3 行。

没有太多解释。 . .

请看:

#include <iostream>
#include <vector>

int main() {

    // 1d vector with any number of values
    std::vector<int> vec1 = { 4, 5, 6, 7 };

    //2d vector with 3 rows
    std::vector<std::vector<int>> vec2(3);

    // Take all elements from vec1 and copy them to vec2, columns first
    for (size_t i{}; i < vec1.size(); ++i) 
        vec2[i % 3].push_back(vec1[i]);

    // Output
    for (const auto& v : vec2) {
        for (const auto& i : v) std::cout << i << "\t";
        std::cout << '\n';
    }

    return 0;
}

我想为 vec2[i % 3].push_back(vec1[i]);-

添加一个解释

您可以以某种方式认为二维 std::vector 由行和列组成。并且一行再次包含 std::vector,其中包含列值。

所以,如果我想使用第 0 行,那么我会写 vec[0]。如果我想为第 0 行添加列值,那么我可以写 vec[0].push_back().

第 1 行和第 2 行采用类似的方法。并且因为我们想要分配索引为 0,1,2,3,4,5,6,7 的“vec1”中的所有值。 . .到数字为 0,1,2,0,1,2,0,1,2,0,1,2 的行。 . .我们需要根据“vec1”的索引计算行号。这可以通过模除法 %

轻松完成

所以:

0 % 3 = 0
1 % 3 = 1
2 % 3 = 2
3 % 3 = 0
4 % 3 = 1
5 % 3 = 2
6 % 3 = 0
7 % 3 = 1
. . .

就这些了。