Como implementar matriz vetorial 2D?

Estou a usar a classe vector na biblioteca STL pela primeira vez. Como devo adicionar a uma linha específica do vector array?

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

vector< int* > my ints;
int add;

Se eu quisesse adicionar à primeira fila de v o primeiro ponteiro de inteiros, poderia fazer

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

este método é adequado para criar um vector 2 D de vector int s onde cada linha pode potencialmente ter um comprimento diferente (ou seja, ter um número diferente de colunas)?

 31
Author: Mysticial, 2012-03-14

9 answers

Não sei bem qual é o problema, pois o teu código de exemplo tem vários erros e não deixa bem claro o que estás a tentar fazer. Mas aqui está como você adiciona a uma linha específica de um vetor 2D:

// 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);
Isto responde à tua pergunta? Se não, poderia tentar ser mais específico sobre o que você está tendo problemas?
 68
Author: Moritz, 2012-03-14 02:57:57

Se conhecer o número (máximo) de linhas e colunas de antemão, poderá usar resize() para inicializar um vetor de vetores e, em seguida, modificar (e acessar) elementos com operator[]. Exemplo:

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;

Outra possibilidade é usar apenas um vetor e dividir o id em várias variáveis, como o access vector[(row * columns) + column].

 50
Author: Roi Danton, 2015-06-27 15:16:15

Basta usar os seguintes métodos para criar um vector 2-D.

int rows, columns;        

// . . .

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

Ou

vector < vector < int > > Matrix;

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

//Do your stuff here...

Isto irá criar uma Matriz de tamanho linhas * colunas e o inicializa com zeros porque estamos a passar um zero(0) como um segundo argumento no construtor eu.e vector (colunas, 0).

 15
Author: Aditya Goel, 2017-04-28 04:15:48

//inicializar primeiro o vector 2D

vector<vector<int>> matrix;

/ / inicializar o vector 1D que gostaria de inserir na matriz

vector<int> row;

/ / Inicializando linha com valores

row.push_back(val1);

row.push_back(val2);

/ / agora a inserir valores na matriz

matrix.push_back(row);

/ / saída- [[val1,val2]]

 8
Author: Madhurya Gandi, 2017-02-11 06:15:44

Podemos facilmente usar vector como matriz 2d. Nós usamos o método resize () para este propósito. O código abaixo pode ser útil para entender esta questão.

Excerto Do Código:

#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;
}
 7
Author: rashedcs, 2017-07-04 13:40:09

Outra forma de definir um vector 2-d é declarar um vector de par.

 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;

Para os vectores 3-d, dá uma vista de olhos à tupla e faz a tupla.

 2
Author: Varun Garg, 2016-04-26 00:38:03
Eu uso este código . por mim, tudo bem .copia-o e corre no teu computador. vais entender sozinho .
#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 ;
    }
}
 2
Author: Ridowan Ahmed, 2016-05-26 06:12:22

Vector matriz (linha, vector (col, 0));

Isto irá inicializar um vetor 2D de linhas=linha e colunas = col, com todos os valores iniciais como 0. Não é necessário inicializar e usar o dimensionamento.

Uma vez que o vector é inicializado com o tamanho, você pode usar "[]" operador como em array para modificar o vector.

Matriz [x] [y] = 2;

 1
Author: Satakshi Pandey, 2020-08-05 03:06:39

vector<int> adj[n]; // em que n é o número de linhas do vector 2d.

 0
Author: Abhishek Kumar, 2020-09-07 11:21:19