我想用 C++ 编写类似 2d 字符串的东西。
我试过:

vector< vector<string> > table;
        int m,n,i,j;
        string s;
        cin>>n>>m;
        for(i=0;i<n;i++) {
                for(j=0;j<m;j++) {
                        cin>>s;
                        table[i][j] = s;
                }
        }
        cout << "\n\n\n\n";
        for(i=0;i<n;i++) {
                for(j=0;j<m;j++) {
                        cout<<table[i][j]<<" ";
                }
                cout<<"\n";
        }

没有编译错误,但是当我输入如下输入时:
10 20
.....#..............
.....#..............
.....#..............
.....#..............
######..............
.......###..........
.......#.#..........
.......###...#######
.............#.....#
.............#######

它给了我段错误。为什么 ?怎么了 ?以及它应该如何做才能正常工作?谢谢你。

最佳答案

这个问题似乎暗示所需的数据结构是一组 n 行,每个行都有 m 字符。有两种方法可以考虑这一点——作为 nxm 字符矩阵,或作为 n m 字符 vector (字符串与 vector<char> 相似但不完全相同)。

所以看起来你不想要 vectorvector s 的 string ,你想要 vectorvectorchar ,或者只是 vectorstring

无论如何,您必须在使用 table[i][j] 或(稍微更惯用的 c++,但在这种情况下没有必要,因为 mn 是事先知道的)之前分配适当的空间量,使用类似 push_back 的东西添加到结束。

还要注意 cin>>sstdin 读取整行(我认为这使得 vector<string> 解决方案更容易处理)。

10-08 08:55
查看更多