24 Stimmen

Zweidimensionales Array mit Vektor

Ich möchte ein 2D-Array mit Hilfe eines Vektors erstellen. Aber wenn ich dies tue, erhalte ich seg-Fehler. Kann mir jemand erklären, was ich falsch mache, und eine mögliche Lösung für dieses Problem.

Ich habe alles öffentlich gemacht, da ich mich jetzt nicht mit Gettern und Settern beschäftigen möchte. Ich möchte das Konzept der 2D-Array klar zu bekommen.

#include <iostream>
#include <vector>
using namespace std;

class point
{   
    public:
        point():x(0),y(0){}
        ~point(){}
        point(float xx,float yy):x(xx),y(yy){}
        float x,y;
};

int main()
{
    vector<vector<point> > a; // 2D array
    point p(2,3);
    a[0][0] = p; // error here
    return 0;
}

1voto

Sunil Seetharam Punkte 21

Ich habe es geschafft, es zum Laufen zu bringen. Habe die Idee für den 'typedef' von irgendwo anders aufgeschnappt. Versuchen Sie den folgenden Code, es funktioniert:

#include <iostream>
#include <stdlib.h>
#include <stdio.h>
#include <vector>

using namespace std;

int main()
{
    int i = 0;
    int j = 0;

///////////////////////////////////////////////////////////

    typedef vector<string> vecRow;
    typedef vector<vecRow> vecCol;

    vecRow vr;
    vecCol vc;
///////////////////////////////////////////////////////////
// Assigning string elements to the 2d array

    for(i=0;i<10;i++)
    {
            for(j=0;j<5;j++)
            {
                vr.push_back("string ["+to_string(i)+"]["+to_string(j)+"]");
            }
            vecRow vr_temp = vecRow(vr);
            vc.push_back(vr_temp);
            vr.clear();
    }

///////////////////////////////////////////////////////////
// Printing back the elements from the 2D array

    for(auto element : vc)
    {
            for(unsigned int ictr = 0;ictr < element.size() ; ictr++)
            {
                cout<<element[ictr]<<"\t";
            }
            cout<<endl;
    }

    getchar();
    return 0;
}

0voto

Behnam Dezfouli Punkte 167

Sie können vectorMatrix[][], eine Matrix von Vektoren, wie folgt definieren.

Klasse:

class vectorMatrix
{
  std::vector<object> **cell;

  int columns;
  int rows;

  public:
  vectorMatrix(int columns, int rows);
  virtual ~vectorMatrix();

  void addCellAt(int row, int column, const object& entry);

  virtual std::vector<object>* getCell(int row, int column);

  void clearMatrix();
};

Definieren Sie den Konstruktor:

vectorMatrix::vectorMatrix(int columns, int rows)
{
   this->columns = columns;
   this->rows = rows;

   cell = new std::vector<object>* [columns];

   for (int i = 0; i < columns; i++)
   {
       cell[i] = new std::vector<object>[rows];
   }
}

Eine Methode zum Hinzufügen eines Eintrags:

void vectorMatrix::addCellAt(int row, int column, const object& entry)
{
       cell[channel][timeSlot].push_back(entry);
}

Abrufen eines Zeigers auf den Vektor in einer bestimmten Zeile und Spalte:

std::vector<object>* vectorMatrix::getCell(int row, int column)
{
    return &cell[row][column];
}

Die gesamte Matrix wird gelöscht:

void vectorMatrix::clearMatrix()
{
    for (int tmpRow = 0; tmpRow < columns; tmpRow ++)
    {
        for(int tmpColumn = 0; tmpColumn < rows; tmpColumn ++)
        {
            cell[tmpRow][tmpColumn].clear();
        }
    }
}

0voto

wcochran Punkte 9155

Sie können verwenden resize() z.B. hier ändere ich die Größe a auf ein 100 x 200 großes Feld:

  vector<vector<point> > a; // 2D array                                         
  a.resize(100);
  for_each(a.begin(),a.end(),[](vector<point>& v){v.resize(200);});
  point p(2,3);
  a[0][0] = p; // ok now

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X