简体   繁体   中英

Fill 2D vector in C++

I'm trying to fill 2D vector in C++ with characters, but when I run this code it ends with one line characters ( *.. ).

How can I fill 2D vector like this: *.* .**

#include <iostream>
#include <vector>

int main()
{
    std::vector<std::vector<char> > vec2D;
    std::vector<char> rowV;

    unsigned int row=2;
    unsigned int col=3;

    char c;
    unsigned int temp=0;

    while(temp!=col)
    {
        while(rowV.size()!=row)
        {
            std::cin>>c;
            rowV.push_back(c);
        }
        vec2D.push_back(rowV);
        ++temp;
    }

    return 0;
}

You should clear rowV after each insertion, otherwise it will be full and no other characters will be added. Also, row should be swapped by col and vice-versa, otherwise you will get a 3x2 (and not 2x3) 2D vector.

while(temp!=row)
{
    while(rowV.size()!=col)
    {
        std::cin>>c;
        rowV.push_back(c);
    }
    vec2D.push_back(rowV);
    rowV.clear(); // clear after inserting
    ++temp;
}

It helps to know what [pushing back a 2DVector with an empty 1D vector] looks like. See the example below.

    #include <algorithm>
    #include <cmath>
    #include <iostream>
    #include <vector>

    using namespace std;

    //-v-----A FUNCTION TO PRINT 2D VECTORS
    template<typename T> //We don't know what type the elements are yet, so we use a template
    void printVec2D(vector<vector<T>> a) // a is the name of our input 2Dvector of type (T)
    {
        for (int i = 0; i < a.size(); i++) {// a.size() will equal the number of rows (i suppose rows/columns can depend on how you look at it)
            for (int j = 0; j < a[i].size(); j++) {// a[i].size() is the size of the i'th row (which equals the number of columns, foro a square array)
                std::cout << a[i][j] << "\t";
            }
            std::cout << "\n";
        }
        return;
    }
    //-^--------

    int main()
    {
        int X = 3; int Y = 3;
        int VectorAsArray[3][3] = {{1,2,3},
                                   {14,15,16},
                                   {107,108,109}};

        vector<vector<int>> T;

        for (int i = 0; i < X; i++)
        {
            T.push_back({});// We insert a blank row until there are X rows
            for (int j = 0; j < Y; j++)
            {
                T[i].push_back(VectorAsArray[i][j]); //Within the j'th row, we insert the element corresponding to the i'th column
            }
        }

        printVec2D(T);

        //system("pause"); //<- I know that this command works on Windows, but unsure otherwise( it is just a way to pause the program)

        return 0;
    }

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM