C++ 填充用未指定维度初始化的向量向量

C++ 填充用未指定维度初始化的向量向量,c++,vector,C++,Vector,我创建了一个二维向量,在初始化时填充“0”: std::vector<std::vector<char>> grid(rows, std::vector<char>(cols, '0')); std::vector网格(行,std::vector(cols,'0'); 但是,我想将其初始化为具有未指定大小的空2d向量: std::vector<std::vector<char>>grid; std::矢量网格; 然后填充它以达到

我创建了一个二维向量,在初始化时填充“0”:

std::vector<std::vector<char>> grid(rows, std::vector<char>(cols, '0'));
std::vector网格(行,std::vector(cols,'0');
但是,我想将其初始化为具有未指定大小的空2d向量:

std::vector<std::vector<char>>grid;
std::矢量网格;
然后填充它以达到与第一条语句相同的效果。我不认为我可以使用
fill()
,因为它没有
.begin()
.end()
,我一直在玩for循环和
push_back
都没有用,通常会出现分段错误。我觉得我正在努力做的应该是可能的,如果这是最好的方式去做吗? 任何帮助都将不胜感激。
谢谢。

您可以使用两个for循环来完成此操作

std::vector<std::vector<char>>grid;
for(int i=0; i<rows; i++) {
    vector<char> v;
    for(int j=0; j<cols; j++) {
        char ch;
        cin >> ch;
        v.push_back(ch);
    }
    grid.push_back(v);
}
std::矢量网格;
对于(int i=0;i ch;
v、 推回(ch);
}
网格。推回(v);
}

如果您能够使用C++11或更高版本,则可以使用以下重载:

就您的情况而言,它将是:

std::vector<std::vector<char>>grid;

...

grid.resize(rows, std::vector<char>(cols, '0'));
std::矢量网格;
...
调整大小(行,std::vector(cols,'0');

为什么不创建一个结构my_val{char val='0';}然后做std::vectorgrid;。我刚开始研究resize,还没有意识到它也可以填充它!这正是我想要的。谢谢!很有趣…你为什么要使用cin对象?没有理由,只是一个如何填充向量的示例。如果你确切知道要添加多少元素(在本例中,您应该
在循环外部的向量中保留
空间,以提高效率。
std::vector<std::vector<char>>grid;

...

grid.resize(rows, std::vector<char>(cols, '0'));