在C ++中迭代“char”的2D向量,空白字符不会打印出来

时间:2011-03-05 18:57:23

标签: c++ vector iterator

我目前正在研究基于战舰文本的游戏,我正在切换我用来将电路板从2D数组char存储到2D矢量的容器。在下面的代码中,我正在初始化整个电路板并将其中的所有字符设置为空白区域。接下来是我创建电路板的所有代码等。

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] = ' ';

当我要将电路板输出到屏幕时,我正在尝试使用为向量提供的迭代器。我遇到的唯一问题是,当使用迭代器时,它似乎忽略了向量中的空格,因此我的游戏板看起来不应该如此。只需使用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;
}

这是我第一次尝试使用矢量,所以我很难过。任何人都知道为什么忽略空白字符?

2 个答案:

答案 0 :(得分:0)

我的第一个问题是:“你为什么使用矢量来制作一个简单的二维阵列?”我只想使用二维数组并完成它。使用单个malloc()调用分配2-D对象数组的有效方法(因此可以通过单个free()调用释放它):

/* set up the memory for a 2D matrix with entries of size "size" */
void** matrix2D(long rows, long columns, long size)
{
    long    i;
    unsigned long long      row_size = (unsigned long long)columns * (unsigned long long)size;
    unsigned long long      data_size = ((unsigned long long)rows * (unsigned long long)columns + 1) * (unsigned long long)size;
    unsigned long long      pointer_size = (unsigned long long)rows * sizeof(void*);
    void**  result;

    if ( (result = (void**)malloc((size_t)(data_size + pointer_size))) == NULL ) {
            return NULL;
    }

    // take the first bit for a vector pointing to the m_pData for each row
    char* pdata = (char*)result + pointer_size;
    if ((unsigned long)pdata % size) {
      pdata += size - (unsigned long)pdata % size;
    }

    // for each row, set up the pointer to its m_pData
    for (i = 0; i < rows; i++) {
            result[i] = (void*)pdata;
            pdata += row_size;
    }

    return result;
}

然后我会使用以下方式设置矩阵:

char** buffer = (char**)matrix2D(height, width, sizeof(char));

我会使用:

初始化数组
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;
}

答案 1 :(得分:0)

您无需使用vector<vector<char> >::iterator。向量类已为您重载了下标vector<vector<char> >::iterator。所以你可以写:

operator[]