如何创建2D字符串向量并在其中插入数据?

时间:2018-02-20 10:29:09

标签: c++ 2d-vector

最后我的数字字符串很少: 说: abc_0_0 xyz_1_0 dfg_0_1 asd_2_0 ghj_0_2 iop_2_1 hkk_1_1 asv_2_2 我可以一次读取它们一次,根据最后的数字,我需要创建一个2D向量,并将字符串元素插入到数字给出的索引处。

因此,对于给定的字符串:index [0] [0]应该有 abc ,index [1] [0]应该有 xyz ,index [0] [1]应该 dfg ,index [2] [0]应该有 asd ,index [0] [2]应该有 ghj , index [2] [1]应该有 iop ,index [1] [1]应该有 hkk ,index [2] [2]应该有 asv < /强>

如何实施?我不知道vector

的实现
#include <cstring>
#include <string>
#include <vector>
#include <iostream>
using namespace std;

int main(void)
{
    int maxentry;
    vector <vector <string>> Data;
    string s;
    char a;
    int c,d;
    cin >> maxentry;
    for(int j=0; j<maxentry; j++)
    {
        cin >> s;
        a=s[4];
        cout << s[4] << endl;
        cout << a <<endl;
        c = int (s[4])-int ('0');
        d = int (s[6])-int ('0');
        cout<< "Value: " <<c << " " << d << endl;
        Data[c][d]=s;  //Doesn't work here
    }



    return 0;
}

1 个答案:

答案 0 :(得分:2)

你的问题是std :: vector是动态结构,这意味着它会改变大小。调用vector的默认构造函数后,其大小为0.这意味着您的2D数组为空。一种可能的实现方式是,只要您没有足够的空间用于相应的索引,就可以resize

for(int j=0; j<maxentry; j++)
{
    // ...
    c = int (s[4])-int ('0');
    d = int (s[6])-int ('0');
    if (Data.size() <= c)
        Data.resize(c + 1); // not enough space -> resize needed
    if (Data[c].size() <= d )
        Data[c].resize(d + 1); // not enough space -> resize needed
    // ...
}

如果您不想调整大小并且您知道您不需要更大的2D阵列而不是10x10,那么您可以使用std::array代替:

array< array< string, 10 >, 10 > Data;