为动态二维数组添加#形外边框的技术实现疑问
问题解答:为动态二维数组添加完整外边框
一、实现顶部和底部边框的方法
在现有代码的基础上,只需在输出中间网格行的前后,各添加一行由#组成的边框即可。边框的长度要和中间行的总字符数一致:中间行是# + maxY个0 (每个数字加空格) + #,总长度为 2 + maxY * 2。
修改后的完整代码如下:
#include <iostream> #include <iomanip> #include <string> using namespace std; void displayCity(int minX, int maxX, int minY, int maxY) { // 输出顶部边框 int borderLen = 2 + maxY * 2; cout << string(borderLen, '#') << endl; // 输出中间网格行 for (int i = 0; i< maxX; ++i) { cout << '#'; for (int j = 0; j < maxY; ++j) { cout << 0 << ' '; // 直接输出0,无需动态数组 } cout << '#' << endl; } // 输出底部边框 cout << string(borderLen, '#') << endl; }
修改后输出效果:
################## #0 0 0 0 0 0 0 0 # #0 0 0 0 0 0 0 0 # #0 0 0 0 0 0 0 0 # #0 0 0 0 0 0 0 0 # #0 0 0 0 0 0 0 0 # #0 0 0 0 0 0 0 0 # #0 0 0 0 0 0 0 0 # #0 0 0 0 0 0 0 0 # ##################
二、原实现的合理性分析
原实现存在几个明显的优化点:
- 无需动态分配数组:你只是将数组元素赋值为0后输出,完全可以直接输出
0,既节省内存,又避免了手动管理内存的潜在风险(比如内存泄漏)。 - 冗余参数未使用:
minX和minY两个参数在代码中没有任何作用,建议要么删除,要么根据实际需求利用这两个参数调整输出范围。 - 多余的格式控制:输出右侧
#时使用setw(1)是冗余操作,直接cout << '#'即可达到相同效果。
内容的提问来源于stack exchange,提问作者Best Jeanist
相关产品推荐
相关产品推荐

