Een tweedimensionale std::vector initialiseren

Dus ik heb het volgende:

std::vector< std::vector <int> > fog;

en ik initialiseer het heel naïef, zoals:

    for(int i=0; i<A_NUMBER; i++)
    {
            std::vector <int> fogRow;
            for(int j=0; j<OTHER_NUMBER; j++)
            {
                 fogRow.push_back( 0 );
            }
            fog.push_back(fogRow);
    }

En het voelt heel verkeerd… Is er een andere manier om een ​​vector als deze te initialiseren?


Antwoord 1, autoriteit 100%

Gebruik de std::vector::vector(count, value) constructor die een initiële grootte en een standaardwaarde accepteert:

std::vector<std::vector<int> > fog(
    ROW_COUNT,
    std::vector<int>(COLUMN_COUNT)); // Defaults to zero initial value

Als een andere waarde dan nul, zeg 4 bijvoorbeeld, de standaardwaarde moest zijn, dan:

std::vector<std::vector<int> > fog(
    ROW_COUNT,
    std::vector<int>(COLUMN_COUNT, 4));

Ik moet ook vermelden dat uniforme initialisatie is geïntroduceerd in C++11, wat de initialisatie van vector en andere containers mogelijk maakt, met behulp van {}:

std::vector<std::vector<int> > fog { { 1, 1, 1 },
                                    { 2, 2, 2 } };

Antwoord 2, autoriteit 32%

Stel dat u 2D-vector, m*n, wilt initialiseren met een beginwaarde van 0

we zouden dit kunnen doen

#include<iostream>
int main(){ 
    int m = 2, n = 5;
    vector<vector<int>> vec(m, vector<int> (n, 0));
    return 0;
}

Antwoord 3, autoriteit 15%

Er is geen append methode in std::vector, maar als je een vector wilt maken met A_NUMBER vectoren van int, elk met other_number nullen, dan kun je dit doen:

std::vector<std::vector<int>> fog(A_NUMBER, std::vector<int>(OTHER_NUMBER));

Antwoord 4, autoriteit 4%

De algemene syntaxis, zoals al afgebeeld is:

std::vector<std::vector<int> > v (A_NUMBER, std::vector <int> (OTHER_NUMBER, DEFAULT_VALUE))  

Hier kan de vector ‘v’ worden gevisualiseerd als een tweedimensionale array, met ‘A_NUMBER’ rijen, met ‘OTHER_NUMBER’ kolommen waarvan de beginwaarde is ingesteld op ‘DEFAULT_VALUE’.

Het kan ook als volgt worden geschreven:

std::vector <int> line(OTHER_NUMBER, DEFAULT_VALUE)
std::vector<std::vector<int> > v(A_NUMBER, line)

Het invoeren van waarden in een 2D-vector is vergelijkbaar met het invoeren van waarden in een 2D-array:

for(int i = 0; i < A_NUMBER; i++) {
     for(int j = 0; j < OTHER_NUMBER; j++) {
         std::cin >> v[i][j]
     }
}

Voorbeelden zijn al genoemd in andere antwoorden….!


Antwoord 5, autoriteit 2%

De aanbevolen aanpak is om de vulconstructor te gebruiken om een ​​tweedimensionale vector met een bepaalde standaardwaarde te initialiseren
:

std::vector<std::vector<int>> fog(M, std::vector<int>(N, default_value));

waar,
M en N zijn afmetingen voor uw 2D-vector.


Antwoord 6, autoriteit 2%

Ik denk dat de gemakkelijkste manier om het voor elkaar te krijgen is:

std::vector<std::vector<int>>v(10,std::vector<int>(11,100));

10 is de grootte van de buitenste of globale vector, die de belangrijkste is, en 11 is de grootte van de binnenste vector van het type int, en de initiële waarden worden geïnitialiseerd op 100! Dat is mijn eerste hulp op de stapel, ik denk dat het iemand helpt.


Antwoord 7

Stel dat u een tweedimensionale geheeltallige vector wilt initialiseren met n rijen en m kolom met elk de waarde ‘VAL

Schrijf het als

std::vector<vector<int>> arr(n, vector<int>(m,VAL));

Deze VAL kan een gehele variabele of constante zijn, zoals 100


Antwoord 8

Dit is wat voor mij werkte:

vector<vector<int>> minA{ROW_SIZE, vector<int>(COLUMN_SIZE, VALUE)};

Antwoord 9

Dit codefragment kopieert de ene tweedimensionale vector naar de andere. En geeft ons een duidelijk beeld van hoe we de 2D-vector moeten initialiseren.

void copyVectorToVector(vector<vector<int>> matrix) {
        int rowNumber = matrix.size();
        int columnNumber = matrix[0].size();
        vector<vector<int>> result(rowNumber, vector<int> (columnNumber, 0));
        for(int i=0;i<matrix.size();i++){
            for(int j=0;j<matrix[i].size();j++){
                result[i][j] = matrix[i][j];
                cout<<result[i][j]<<" ";
            }
            cout<<endl;
        }
}

Antwoord 10

Mijn c++ STL-code om 5*3 2-D vector te initialiseren met zero


#include <iostream>
using namespace std;
#include <vector>
int main()
{// if we wnt to initialise a 2 D vector with 0;
    vector<vector<int>> v1(5, vector<int>(3,0));
    for(int i=0;i<v1.size();i++) 
{
        for(int j=0;j<v1[i].size();j++)
           cout<<v1[i][j]<<" ";
            cout<<endl;
    }
}

LEAVE A REPLY

Please enter your comment!
Please enter your name here

1 × 5 =

Other episodes