C++ 在“的2D向量上迭代”;char";在C++;,未打印出空白字符

C++ 在“的2D向量上迭代”;char";在C++;,未打印出空白字符,c++,vector,iterator,C++,Vector,Iterator,我目前正在开发一款基于战舰文本的游戏,我正在将用于存储棋盘的容器从二维字符数组切换到二维向量。在下面截取的代码中,我正在初始化整个电路板,并将其中的所有字符设置为空白。下面是我创建电路板的所有代码等 const int width = 100; const int height = 35; vector< vector<char> > buffer(width, vector<char>(height,0)); for (int y = 0; y <

我目前正在开发一款基于战舰文本的游戏,我正在将用于存储棋盘的容器从二维字符数组切换到二维向量。在下面截取的代码中,我正在初始化整个电路板,并将其中的所有字符设置为空白。下面是我创建电路板的所有代码等

const int width  = 100;
const int height = 35;
vector< vector<char> > buffer(width, vector<char>(height,0));

for (int y = 0; y < height; ++y)
    for (int x = 0; x < width; ++x)
        buffer[x][y] = ' ';
const int width=100;
const int height=35;
向量<向量>缓冲区(宽度,向量(高度,0));
对于(int y=0;y
当我要将电路板输出到屏幕时,我试图使用为向量提供的迭代器。我唯一的问题是,当使用迭代器时,它似乎忽略了向量中的空格,所以我的游戏板看起来不像它应该的那样。只需使用double for循环遍历向量,输出就可以了

vector<vector<char> >::const_iterator row;
vector<char>::const_iterator col;
for (row = buffer.begin(); row != buffer.end(); row++) {
    for (col = row->begin(); col != row->end(); col++) {
            cout << *col;
    }
    cout << endl;
}
vector::const_迭代器行;
向量::常量迭代器列;
for(row=buffer.begin();row!=buffer.end();row++){
对于(col=行->开始();col!=行->结束();col++){
cout我的第一个问题是:“为什么要对一个简单的二维数组使用向量?”我只想使用一个二维数组并完成它。一个简单的malloc()调用分配一个二维数组对象的有效方法是:

我将使用以下命令初始化阵列:

for (int i = 0; i < height; ++i)
    for (int j = 0; j < width; ++j)
        buffer[i][j] = ' ';
for (int i = 0; i < height; ++i) {
    for (int j = 0; j < width; ++j)
        cout << buffer[i][j];
    cout << endl;
}
for(int i=0;i
我将使用以下方法打印阵列:

for (int i = 0; i < height; ++i)
    for (int j = 0; j < width; ++j)
        buffer[i][j] = ' ';
for (int i = 0; i < height; ++i) {
    for (int j = 0; j < width; ++j)
        cout << buffer[i][j];
    cout << endl;
}
for(int i=0;icout您不需要使用
向量::迭代器
。向量类为您重载了下标
操作符[]
。因此您可以编写:

for(size_t i = 0; i < height; i++)
{
    for(size_t j = 0; j < width; j++)
    {
        cout << buffer[i][j]; // buffer is a vector<vector<char> >
    }
    cout << "\n";
}
(尺寸i=0;i { 对于(尺寸j=0;j您是否可以反转行和列。
buffer
包含
width
元素,因此,它包含列。
buffer
的每个元素都是列,但您可以将它们打印为行。
[row][column]可能更易于使用
索引一致,一开始可能不直观,因为它归结为
[y][x]
。啊,是的。应该是
向量缓冲区(高度,向量(宽度,0));
缓冲区[y][x]
@Tomalak:不完全正确,因为初始化
循环的
会中断。@Thomas:我相信更改后它们是正确的。这就是错误的原因:它们现在不正确。是否使用空格不如其他字符宽的字体。这会使输出看起来很有趣。