如何为 3D 向量获取 3 维输入?
How to take 3 dimensional input for 3D vector?
我必须输入维度为 (n,m,4) 的 3D 向量。我写了下面的一段代码,不知道为什么不起作用,请让我知道我做错了什么。
cin>>n>>m;
vector<vector<vector<char>>> v3;
for(int i=0;i<n;i++){
vector<vector<char>> v2;
for(int k=0;k<m;k++){
vector<char> v1;
char a;
for(int j=0;j<4;j++){
cin>>a;
v1.push_back(a);
}
v2.push_back(v1);
}
v3.push_back(v2);
}
示例输入:-
2 4
G Y B R
B G R Y
G Y B R
G R B Y
B Y G R
G B R Y
B R G Y
B R G Y
提前致谢:)
你没有描述问题。是编译错误吗?运行时错误?
无论如何 - 你的代码是在 MSVC 上编译的(如已经建议的那样,将 int
替换为 char
)。
但它的实现方式效率低下,因为它涉及 std::vector
s 周围的大量复制,使用 push_back
将导致 vector
s 的重新分配。
既然预先知道大小,最好事先分配好,填满std::vector
即可。
类似于:
int n=0, m=0;
std::cin >> n >> m;
std::vector<std::vector<std::vector<char>>> v3(n);
for (auto & v2 : v3) {
v2.resize(m);
for (auto & v1 : v2) {
v1.resize(4);
for (auto & val : v1) {
std::cin >> val;
}
}
}
顺便说一句 - 使用 using namespace std
不是一个好主意。总是最好避免它并使用 std::vector
等。你可以在这里看到为什么:Why is "using namespace std;" considered bad practice?
您应该将 int a;
替换为 char a;
,因为提供的输入是字符。
此外,您可以使用 基于范围的 for
循环使您的代码更高效且 可读 ,如下所示:
int n = 0, m = 0;
cin>>n>>m;
vector<vector<vector<char>>> v3(n, std::vector<std::vector<char>>(m, std::vector<char>(4)));
for(auto& row: v3){
for(auto& col: row){
for(char& element: col){
cin>>element;
}
}
}
我必须输入维度为 (n,m,4) 的 3D 向量。我写了下面的一段代码,不知道为什么不起作用,请让我知道我做错了什么。
cin>>n>>m;
vector<vector<vector<char>>> v3;
for(int i=0;i<n;i++){
vector<vector<char>> v2;
for(int k=0;k<m;k++){
vector<char> v1;
char a;
for(int j=0;j<4;j++){
cin>>a;
v1.push_back(a);
}
v2.push_back(v1);
}
v3.push_back(v2);
}
示例输入:-
2 4
G Y B R
B G R Y
G Y B R
G R B Y
B Y G R
G B R Y
B R G Y
B R G Y
提前致谢:)
你没有描述问题。是编译错误吗?运行时错误?
无论如何 - 你的代码是在 MSVC 上编译的(如已经建议的那样,将 int
替换为 char
)。
但它的实现方式效率低下,因为它涉及 std::vector
s 周围的大量复制,使用 push_back
将导致 vector
s 的重新分配。
既然预先知道大小,最好事先分配好,填满std::vector
即可。
类似于:
int n=0, m=0;
std::cin >> n >> m;
std::vector<std::vector<std::vector<char>>> v3(n);
for (auto & v2 : v3) {
v2.resize(m);
for (auto & v1 : v2) {
v1.resize(4);
for (auto & val : v1) {
std::cin >> val;
}
}
}
顺便说一句 - 使用 using namespace std
不是一个好主意。总是最好避免它并使用 std::vector
等。你可以在这里看到为什么:Why is "using namespace std;" considered bad practice?
您应该将 int a;
替换为 char a;
,因为提供的输入是字符。
此外,您可以使用 基于范围的 for
循环使您的代码更高效且 可读 ,如下所示:
int n = 0, m = 0;
cin>>n>>m;
vector<vector<vector<char>>> v3(n, std::vector<std::vector<char>>(m, std::vector<char>(4)));
for(auto& row: v3){
for(auto& col: row){
for(char& element: col){
cin>>element;
}
}
}