string []或vector <string>?</string>

时间:2014-09-26 12:20:23

标签: c++ arrays string vector

我必须制作这个&#34; *&#34;用字符串制作,我知道这个矩形的长度和高度

*****
*****
*****
*****

我想知道我应该使用哪种方法,字符串数组或字符串向量(或者可能是第三种解决方案?)。我还想提一下,我必须能够访问每个&#34; *&#34;通过它的坐标并可能以下列方式改变它

*+*+*
*****
++***
**+**

4 个答案:

答案 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是行号,字符串是完整的字符串)。它的性能很好,因为内部的无序映射基于哈希表的概念。