Como implementar matriz vetorial 2D?
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)?
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?
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]
.
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).
//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]]
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;
}
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.
#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 ;
}
}
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;
vector<int> adj[n];
// em que n é o número de linhas do vector 2d.