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



我有一个一维矢量

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行,适用类似的方法。并且由于我们想要从";vec1";索引为0,1,2,3,4,5,6,7。到数字为0,1,2,0,1,2,0,1.2,0,0,1,20,1,2的行。我们需要根据"0"的索引来计算行数;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
. . .

仅此而已。

最新更新