web-dev-qa-db-de.com

Wie implementiere ich ein 2D-Vektorarray?

Ich verwende zum ersten Mal die Vektorklasse in der STL-Bibliothek. Wie soll ich eine bestimmte Zeile des Vektorarrays hinzufügen?

struct x{
     vector <vector <int> > v;
     int row;
 };

vector< int* > my ints;
int add;

wenn ich die erste Zeile von v mit dem ersten Zeiger von ganzen Zahlen hinzufügen wollte, könnte ich das tun 

myints[0]->v[myints[0]->row].Push_back(add);

Ist diese Methode gut, um einen 2D-Vektor des Vektors ints zu erstellen, wobei jede Zeile möglicherweise eine unterschiedliche Länge haben könnte (d. H. Eine unterschiedliche Anzahl von Spalten hat)?

20
John Smith

Ich bin nicht ganz sicher, was das Problem ist, da Ihr Beispielcode mehrere Fehler enthält und nicht wirklich klar macht, was Sie versuchen. Aber so fügen Sie eine bestimmte Zeile eines 2D-Vektors hinzu:

// declare 2D vector
vector< vector<int> > myVector;
// make new row (arbitrary example)
vector<int> myRow(1,5);
myVector.Push_back(myRow);
// add element to row
myVector[0].Push_back(1);

Beantwortet das deine Frage? Wenn nicht, könnten Sie versuchen, genauer zu sagen, mit was Sie Probleme haben?

58
Moritz

Wenn Sie die (maximale) Anzahl von Zeilen und Spalten vorher kennen, können Sie mit resize() einen Vektor von Vektoren initialisieren und anschließend Elemente mit operator[] ändern (und darauf zugreifen). Beispiel:

int no_of_cols = 5;
int no_of_rows = 10;
int initial_value = 0;

std::vector<std::vector<int>> matrix;
matrix.resize(no_of_rows, std::vector<int>(no_of_cols, initial_value));

// Read from matrix.
int value = matrix[1][2];

// Save to matrix.
matrix[3][1] = 5;

Eine andere Möglichkeit besteht darin, nur einen Vektor zu verwenden und die ID in mehrere Variablen aufzuteilen, wie zum Beispiel vector[(row * columns) + column].

40
Roi Danton

Verwenden Sie einfach die folgenden Methoden, um einen 2-D-Vektor zu erstellen.

int rows, columns;        

// . . .

vector < vector < int > > Matrix(rows, vector< int >(columns,0));

ODER 

vector < vector < int > > Matrix;

Matrix.assign(rows, vector < int >(columns, 0));

//Do your stuff here...

Dadurch wird eine Matrix aus Größe Zeilen * Spalten erstellt und mit Nullen initialisiert, da im Konstruktor eine Null (0) als zweites Argument übergeben wird, dh vector <int> (Spalten, 0 )

8
Aditya Goel

// initialisiere zuerst den 2D Vektor

vector<vector<int>> matrix;

// initialisiere den 1D-Vektor, den du in die Matrix einfügen möchtest

vector<int> row;

// Zeile mit Werten initialisieren

row.Push_back(val1);

row.Push_back(val2);

// füge jetzt Werte in die Matrix ein

matrix.Push_back(row);

// Ausgabe- [[Wert1, Wert2]]

6
Madhurya Gandi

Wir können vector als 2d-Array verwenden. Wir verwenden die resize () -Methode für diesen Zweck.

Code-Auszug :

#include<bits/stdc++.h>
using namespace std;

int main()
{
    ios::sync_with_stdio(false);
    int row, col;
    cin>>row>>col;

    vector <vector<int>> v;
    v.resize(col,vector<int>(row));

    //v = {{1,2,3}, {4,5,6}, {7,8,9}}; 

    /** input from use **/
    for(int i=0; i<row; i++)
    {
       for(int j=0; j<col; j++)
       {
          cin>>v[i][j];
       }
    }

    for(int i=0;i<row; i++)
    {
       for(int j=0;j<col;j++)
       {
          cout<<v[i][j]<<" ";
       }
    }
    return 0;
}
4
rashedcs

Eine andere Möglichkeit, einen 2D-Vektor zu definieren, besteht darin, einen Vektor von Paaren zu deklarieren. 

 vector < pair<int,int> > v;

**To insert values**
 cin >> x >>y;
 v.Push_back(make_pair(x,y));

**Retrieve Values**
 i=0 to size(v)
 x=v[i].first;
 y=v[i].second;

Für 3-D-Vektoren werfen Sie einen Blick auf Tuple und make_Tuple.

1
Varun Garg

Ich benutze diesen Code. funktioniert gut für mich .copy und auf Ihrem Computer laufen. Du wirst es selbst verstehen.

#include <iostream>
#include <vector>
using namespace std;
int main()
{
    vector <vector <int> > matrix;
    size_t row=3 , col=3 ;
    for(int i=0,cnt=1 ; i<row ; i++)
    {
        for(int j=0 ; j<col ; j++)
        {
            vector <int> colVector ;
            matrix.Push_back(colVector) ;
            matrix.at(i).Push_back(cnt++) ;
        }
    }
    matrix.at(1).at(1) = 0;     //matrix.at(columns).at(rows) = intValue 
    //printing all elements
    for(int i=0,cnt=1 ; i<row ; i++)
    {
        for(int j=0 ; j<col ; j++)
        {
            cout<<matrix[i][j] <<" " ;
        }
        cout<<endl ;
    }
}
1
Ridowan Ahmed