将数据推回2D向量中

时间:2018-11-07 05:14:46

标签: c++ vector 2d push-back

我正在尝试创建设置大小的2d向量,然后将数据插入其中。我遇到的问题是能够插入填充2d向量中每一行的数据。

我已经阅读了其他各种线程,但是找不到适合我的实现。

以下是我的问题的示例代码:

int main()
{
    vector<string> strVec = { "a","b","c","d" }; 
    // letters to insert into vector                                        
    // this is just a sample case

    vector< vector<string>> vec;        // 2d vector
    int cols = 2;                       // number of columns 
    int rows = 2;                       // number of rows


    for (int j = 0; j < cols; j++)      // inner vec
    {
        vector<string>temp;             // create a temporary vec
        for (int o = 0; o < rows; o++)  // outer vec
        {
            temp.push_back("x");        // insert temporary value
        }
        vec.push_back(temp);            // push back temp vec into 2d vec
    }

    // change each value in the 2d vector to one
    // in the vector of strings
    // (this doesn't work) 
    // it only changes the values to the last value of the 
    // vector of strings
    for (auto &v : strVec)  
    {
        for (int i = 0; i < vec.size(); i++)
        {
            for (int j = 0; j < vec[i].size(); j++)
            {
                vec[i][j] = v;
            }
        }
    }

    // print 2d vec
    for (int i = 0; i < vec.size(); i++)
    {
        for (int j = 0; j < vec[i].size(); j++)
        {
            cout << vec[i][j];
        }
        cout << endl;
    }
}

2 个答案:

答案 0 :(得分:1)

您正在循环vec中一次又一次地向for (auto &v : strVec)的所有元素分配相同的字符串。 即vec[0][0]=vec[0][1]=vec[1][0]=vec[1][1]=avec[0][0]=vec[0][1]=vec[1][0]=vec[1][1]=b,依此类推。

删除此外部循环并将strVec[i*cols+j]分配给vec[i][j],我们可以获得所需的输出。

DEMO is here.

for (int i = 0; i < vec.size(); i++)
{
    for (int j = 0; j < vec[i].size(); j++)
    {
        vec[i][j] = strVec[i*cols+j];
    }
}

答案 1 :(得分:0)

for (int i = 0; i < vec.size(); i++)
{
    for (int j = 0; j < 2; j++)
    {
        cout << vec[i][j];
    }
    cout << endl;
}