c++ - una - Inicializando un vector de vectores que tiene un tamaño fijo con asignación de impulso
vectores en c++ pdf (4)
Tener un vector de vector con un tamaño fijo,
vector<vector<int> > v(10);
Me gustaría inicializarlo para que tenga en todos los elementos un vector unidimensional con valor inicializado (por ejemplo 1).
He usado Boost Assign de la siguiente manera
v= repeat(10,list_of(list_of(1)));
y tengo un error de compilación
error: no matching function for call to ‘repeat(boost::assign_detail::generic_list<int>)’
¿Podría decirme cómo hacer eso? Gracias por adelantado
Esto no usa boost::assign
pero hace lo que necesita:
vector<vector<int> > v(10, vector<int>(10,1));
Esto crea un vector que contiene 10 vectores de int
, cada uno contiene 10 ints
.
No necesita usar boost
para el comportamiento requerido. A continuación, se crea un vector
de 10
vector<int>
s, con cada vector<int>
contiene 10
int
s con un valor de 1
:
std::vector<std::vector<int> > v(10, std::vector<int>(10, 1));
Voy a tratar de explicarlo a los nuevos en C ++. Un vector de mat
de verificadores tiene la ventaja de que puede acceder a sus elementos directamente casi sin costo utilizando el operador []
.
int n(5), m(8);
vector<vector<int> > mat(n, vector<int>(m));
mat[0][0] =4; //direct assignment OR
for (int i=0;i<n;++i)
for(int j=0;j<m;++j){
mat[i][j] = rand() % 10;
}
Por supuesto, esta no es la única manera. Y si no agrega o elimina elementos, también puede usar los contenedores nativos mat[]
que no son más que punteros. Aquí está mi manera favorita, usando C ++:
int n(5), m(8);
int *matrix[n];
for(int i=0;i<n;++i){
matrix[i] = new int[m]; //allocating m elements of memory
for(int j=0;j<m;++j) matrix[i][j]= rand()%10;
}
De esta forma, no tiene que usar #include <vector>
. ¡Con suerte, está más claro!
#include <vector>
#include <iostream>
using namespace std;
int main(){
int n; cin >> n;
vector<vector<int>> v(n);
//populate
for(int i=0; i<n; i++){
for(int j=0; j<n; j++){
int number; cin >> number;
v[i].push_back(number);
}
}
// display
for(int i=0; i<n; i++){
for(int j=0; j<n; j++){
cout << v[i][j] << " ";
}
cout << endl;
}
}
Entrada:
4
11 12 13 14
21 22 23 24
31 32 33 34
41 42 43 44
Salida:
11 12 13 14
21 22 23 24
31 32 33 34
41 42 43 44