我目前正在研究基于战舰文本的游戏,我正在切换我用来将电路板从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;
}
这是我第一次尝试使用矢量,所以我很难过。任何人都知道为什么忽略空白字符?
答案 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[]