我必须制作这个" *"用字符串制作,我知道这个矩形的长度和高度
*****
*****
*****
*****
我想知道我应该使用哪种方法,字符串数组或字符串向量(或者可能是第三种解决方案?)。我还想提一下,我必须能够访问每个" *"通过它的坐标并可能以下列方式改变它
*+*+*
*****
++***
**+**
答案 0 :(得分:4)
vector<char>
。为什么呢?因为那些不是真正的字符串。用二维数据视图包裹你的一维矢量,你已经完成了。
如果您在编译时知道的大小,std::array
可能是一个选项。
答案 1 :(得分:1)
您可以使用类似这样的类:
class Matrix
{
public:
Matrix(int w, int h);
char& at(int x, int y);
void fill(char value);
private:
int width;
int height;
std::vector<char> vec;
};
// matrix.cpp
Matrix::Matrix(int w, int h)
{
vec.reserve(w * h);
width = w;
height = h;
}
char& Matrix::at(int x, int y)
{
assert(x < width && y < height && "variable can't be superior to matrix size");
return vec[x + y * width];
}
void Matrix::fill(char value)
{
std::fill(vec.begin(), vec.end(), value);
}
答案 2 :(得分:0)
您可以使用由字符串组成的Vector(动态数组)来生成*的块,并且每个位置/坐标都可以作为arr [i] [j]访问,这意味着第i行和第j列。
Outline of the code:
Vector<string> arr;
string X=" ";
for(k=0;k<breadth;k++)X+='*';
//now push X into arr
for(k=0;k<length;k++)arr.push_back(X);
Use two for loops let i and j be the indices of row and col then u can access a particular index (say to change a * to + on 2 nd row 3rd column) as
arr[i][j]=arr[2][3]='+';
答案 3 :(得分:-1)
如果需要随机更改给定的任何坐标(line_no,col_no),我建议去包装&#34; boost :: unordered_map&lt; int,std :: string&gt;&#34; (其中int是行号,字符串是完整的字符串)。它的性能很好,因为内部的无序映射基于哈希表的概念。