2010-06-17 9 views
16

¿Hay alguna manera de inicializar un vector de vectores de la misma manera rápida cuando inicializa una matriz?Inicialización de un vector de vectores?

typedef int type; 

type matrix[2][2]= 
{ 
{1,0},{0,1} 
}; 

vector<vector<type> > vectorMatrix; //??? 

Respuesta

7

Para el único vector puede utilizar siguiente:

typedef int type; 
type elements[] = {0,1,2,3,4,5,6,7,8,9}; 
vector<int> vec(elements, elements + sizeof(elements)/sizeof(type)); 

Basado en que se puede utilizar siguiente:

type matrix[2][2]= 
{ 
    {1,0},{0,1} 
}; 

vector<int> row_0_vec(matrix[0], matrix[0] + sizeof(matrix[0])/sizeof(type)); 

vector<int> row_1_vec(matrix[1], matrix[1] + sizeof(matrix[1])/sizeof(type)); 

vector<vector<type> > vectorMatrix; 
vectorMatrix.push_back(row_0_vec); 
vectorMatrix.push_back(row_1_vec); 

En c++0x, que sea capaz de inicializar contenedores estándar en una del mismo modo que las matrices.

+0

Esta solución es muy similar a lo que tenía en mente. – Eric

3

En C++ 0x, creo que puede usar la misma sintaxis que para su matrix.

En C++ 03, tiene que escribir un código tedioso para rellenarlo. Boost.Assign podría ser capaz de simplificarlo un poco, usando algo como el siguiente código no probado:

#include <boost/assign/std/vector.hpp> 

vector<vector<type> > v; 
v += list_of(1)(0), list_of(0)(1); 

o incluso

vector<vector<type> > v = list_of(list_of(1)(0))(list_of(0)(1)); 
+0

Lo intenté, pero parece que no funciona. Tengo un 'vector ' y me gustaría inicializar el primer elemento de la variable en uno para que tenga un vector de solo un vector de elemento inicializado en uno. Gracias de antemano. – saloua

+0

@tuxworker: en C++ 11, eso es 'vector > v {{1}};'. Con Boost.Asignar en C++ 03, algo así como 'vector > v = list_of (list_of (1));'. Si eso no funciona, formule una nueva pregunta que muestre lo que está intentando y describa qué es lo que falla. –

+0

De hecho, probé 'vector > v (10); v + = list_of (list_of (1)); 'y' vector > v (10); v = list_of (list_of (1)); 'y tengo un error de compilación. Creo que también sería mejor usarlo además de repetir pero no sé cómo. Haré una nueva pregunta. Gracias – saloua

3
std::vector<std::vector<int>> vector_of_vectors; 

continuación, si desea agregar, puede utilizar este procedimiento :

vector_of_vectors.resize(#rows); //just changed the number of rows in the vector 
vector_of_vectors[row#].push_back(someInt); //this adds a column 

O puede hacer algo como esto:

std::vector<int> myRow; 
myRow.push_back(someInt); 
vector_of_vectors.push_back(myRow); 

Así, en su caso, debe ser capaz de decir:

vector_of_vectors.resize(2); 
vector_of_vectors[0].resize(2); 
vector_of_vectors[1].resize(2); 
for(int i=0; i < 2; i++) 
for(int j=0; j < 2; j++) 
    vector_of_vectors[i][j] = yourInt; 
2

Si la matriz se llena por completo -

vector< vector<int> > TwoDVec(ROWS, vector<int>(COLS)); 
//Returns a matrix of dimensions ROWS*COLS with all elements as 0 
//Initialize as - 
TwoDVec[0][0] = 0; 
TwoDVec[0][1] = 1; 
.. 
. 

Actualización: He encontrado que hay una manera mejor here

else si hay un número variable de elementos en cada fila (no una matriz) -

vector< vector<int> > TwoDVec(ROWS); 
for(int i=0; i<ROWS; i++){ 
    while(there_are_elements_in_row[i]){   //pseudocode 
     TwoDVec[i].push_back(element); 
    } 
} 
Cuestiones relacionadas