如何为 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::vectors 周围的大量复制,使用 push_back 将导致 vectors 的重新分配。

既然预先知道大小,最好事先分配好,填满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;     
        }   
    }   
}

Working demo