vectores - pasar array como parametro c++




c++ 11 inicialización de vector en una llamada de función (2)

Tengo una pregunta acerca de la nueva forma de acceso directo para definir vectores en c ++ 11. Supongamos que tengo la siguiente clase

struct Tester{

  vector< vector<int> > data;

  Tester(){
    data = vector< vector<int> >();
  }

  void add(vector<int> datum){
    data.push_back(datum);
  }

};

Entonces, lo siguiente funciona como se espera:

int main(){
    Tester test = Tester();
    vector<int> datum = vector<int>{1,2,3};
    test.add(datum);
}

pero esto no lo hace

int main(){
    Tester test = Tester();
    test.add(vector<int>{1,2,3});
}

¿Puede alguien por favor explicarme la diferencia? ¿Cómo puedo hacer el acceso directo que intento en el segundo main ()?


Si desea evitar la copia de datos:

#include <vector>
#include <iostream>

using namespace std;

struct Tester
{
    vector< vector<int> > data;

    Tester()
    {
        data = vector< vector<int> >();
    }

    void add(vector<int> && datum)
    {
        data.push_back(std::move(datum));
    }

};


int main()
{
    Tester test = Tester();
    test.add(vector<int>{1,2,3});

    for(const auto &v : test.data[0])
        std::cout << v << std::endl;
}

Tu código parece estar bien, pero el compilador que estás usando no lo está (lo que parece ser antiguo).

Por cierto, estás haciendo demasiado.

Esto debería ser suficiente:

vector<int> datum{1,2,3}; //initialization

test.add({1,2,3}); //create vector<int> on the fly and pass it to add()

No olvides actualizar tu compilador.

Además, los data = vector< vector<int> >(); línea data = vector< vector<int> >(); También es demasiado. No es necesario. El vector se construye automáticamente, lo que significa que puede dejar el constructor de su clase vacío, o no tenerlo, ya que de todos modos no hace nada.







c++11