Vector de vectores C++

Iniciado por anonimo12121, 23 Febrero 2013, 01:50 AM

0 Miembros y 2 Visitantes están viendo este tema.

anonimo12121

Buenas debido a necesidad he tenido que aprender a usar esto y quisiera que me dijeraís si esta bien o no.

El objetivo es hacer un vector bidimesional Ejemplo, v[ x ][ x ]
en el caso siguiente seria al final 10*10
Código (cpp) [Seleccionar]

vector< vector<int> > Vector2;
vector<int> v1t;

for(int y=0;y<10;y++){
   for(int x=0;x<10;x++){
       v1t.push_back(y);
   }
   Vector2.push_back(v1t);
   v1t.clear;
}



Está bien echo así?
Página para ganar Bitcoins y Dinero: http://earnbit.hol.es/
Video de YouTube con Hack para el LoL: http://adf.ly/5033746/youtube-lolemuhack
Si quieres ganar dinero con adfly entra y registrate aquí -> http://adf.ly/?id=5033746

leosansan

Creo que el ejemplo te valdrá y aclarará un poco:

Código (cpp) [Seleccionar]
#include <iostream>
#include<vector>
#include <iomanip>

using namespace std;
int main() {

  vector< vector<int> > Vector2 ( 10, vector<int> (10) );
 
  for(int y=0;y<10;y++){
      for(int x=0;x<10;x++){
          Vector2[y][x]=(x+y);
      }
  }
  for ( int i = 0; i < 10; i++ ) {
    for ( int j = 0; j < 10; j++ )
      cout<< setw ( 3 ) << Vector2[i][j] <<' ';
    cout<<'\n';
    }
  return 0;
}



Saluditos!.

anonimo12121

Yo esque cuando declaro el vector aún no se el tamaño, porque es dinamico y no se como hacerlo cuando se el tamaño exacto, por eso lo he echo como en el ejemplo.
Página para ganar Bitcoins y Dinero: http://earnbit.hol.es/
Video de YouTube con Hack para el LoL: http://adf.ly/5033746/youtube-lolemuhack
Si quieres ganar dinero con adfly entra y registrate aquí -> http://adf.ly/?id=5033746

leosansan

#3
Cita de: Xafi en 23 Febrero 2013, 20:02 PM
Yo esque cuando declaro el vector aún no se el tamaño, porque es dinamico y no se como hacerlo cuando se el tamaño exacto, por eso lo he echo como en el ejemplo.

Supongo que aunque dinámico en algún momento tendrás que introducir las dimensiones del mismo, en el ejemplo que propones están dimensionados a priori a 10. En otro caso:

Código (cpp) [Seleccionar]
#include <iostream>
#include<vector>
#include <iomanip>

using namespace std;
int main() {
 int m,n;
   cout<<"introduzca el numero de filas"<<endl;
   cin>>m;
   cout<<"introduzca el numero de columnas"<<endl;
   cin>>n;
 vector< vector<int> > Vector2 ( m, vector<int> (n) );

 for(int y=0;y<m;y++){
     for(int x=0;x<n;x++){
         Vector2[y][x]=(x+y);
     }
 }
 for ( int i = 0; i < m; i++ ) {
   for ( int j = 0; j < n; j++ )
     cout<< setw ( 3 ) << Vector2[i][j] <<' ';
   cout<<'\n';
   }
 return 0;
}


Saluditos!.

anonimo12121

no se mira.

Código (cpp) [Seleccionar]
lass SceneMap : public Scene {
    public:
        SceneMap(string name,int z=0);
        ~SceneMap();
        void Update();
    private:
    vector<vector <int> > i_Map;//tamaño del mapa
...

Código (cpp) [Seleccionar]
SceneMap::SceneMap(string name,int z){
    setZ(z);
    ifstream file(name.c_str());
    file >> s_NameTiles;
    file >> i_SizeTile;
    file >> i_SizeMapW;
    file >> i_SizeMapH;
    Image_TileOrig.loadFromFile(s_NameTiles);
    i_SizeTileW = Image_TileOrig.getSize().x/i_SizeTile;
    i_SizeTileH = Image_TileOrig.getSize().y/i_SizeTile;
    Image_TileDest.create(i_SizeMapW*i_SizeTile,i_SizeMapH*i_SizeTile,sf::Color::Red);
    vector<int> vt;
    for(int i=0;i<i_SizeMapH;i++){
        for(int j=0;j<i_SizeMapW;j++){
            vt.push_back(0);
            file >> vt[j];
            Image_TileDest.copy(Image_TileOrig,j*i_SizeTile,i*i_SizeTile,sf::IntRect(( ((vt[j]%i_SizeTileW)-1) * i_SizeTile),(( (vt[j]/i_SizeTileW)) * i_SizeTile),i_SizeTile,i_SizeTile));
        }
        i_Map.push_back(vt);
        vt.clear();
    }


Perdona si no me entero mucho hoy Leo...
Página para ganar Bitcoins y Dinero: http://earnbit.hol.es/
Video de YouTube con Hack para el LoL: http://adf.ly/5033746/youtube-lolemuhack
Si quieres ganar dinero con adfly entra y registrate aquí -> http://adf.ly/?id=5033746

leosansan

#5
Cita de: Xafi en 23 Febrero 2013, 21:10 PM
no se mira.

Código (cpp) [Seleccionar]
lass SceneMap : public Scene {
   public:
       SceneMap(string name,int z=0);
       ~SceneMap();
       void Update();
   private:
   vector<vector <int> > i_Map;//tamaño del mapa
...

Código (cpp) [Seleccionar]
SceneMap::SceneMap(string name,int z){
   setZ(z);
   ifstream file(name.c_str());
   file >> s_NameTiles;
   file >> i_SizeTile;
   file >> i_SizeMapW;
   file >> i_SizeMapH;
   Image_TileOrig.loadFromFile(s_NameTiles);
   i_SizeTileW = Image_TileOrig.getSize().x/i_SizeTile;
   i_SizeTileH = Image_TileOrig.getSize().y/i_SizeTile;
   Image_TileDest.create(i_SizeMapW*i_SizeTile,i_SizeMapH*i_SizeTile,sf::Color::Red);
  // vector<int> vt;  <====="esto no seria sino":
 vector< vector<int> > vt ( i_SizeMapH, vector<int> (i_SizeMapW) );
   for(int i=0;i<i_SizeMapH;i++){
       for(int j=0;j<i_SizeMapW;j++){
           vt.push_back(0);
           file >> vt[j];
           Image_TileDest.copy(Image_TileOrig,j*i_SizeTile,i*i_SizeTile,sf::IntRect(( ((vt[j]%i_SizeTileW)-1) * i_SizeTile),(( (vt[j]/i_SizeTileW)) * i_SizeTile),i_SizeTile,i_SizeTile));
       }
       i_Map.push_back(vt);
       vt.clear();
   }


....................

Espero que veas en el código mi propuesta y te sirva.

..............No obstante veo una incongruencia ya que vt se declara como bidimensional pero en líneas posteriores parece actuar como unidimensional ¿¿¿???. No, no tiene sentido.

Te lo dejo por si te sirve de algo.
:rolleyes:

Saluditos!.

anonimo12121

vale lo ví!

gracia modificaré el code

Saludos!!
Página para ganar Bitcoins y Dinero: http://earnbit.hol.es/
Video de YouTube con Hack para el LoL: http://adf.ly/5033746/youtube-lolemuhack
Si quieres ganar dinero con adfly entra y registrate aquí -> http://adf.ly/?id=5033746