如何在不知道宽度的情况下将元素存储在二维向量中?
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
. . .
就这些了。
我有一个一维向量
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
. . .
就这些了。