Kirjoittaja Aihe: [ ratkaistu ] c++ stl 2-ulotteisen vektorin alustus  (Luettu 1587 kertaa)

teele

  • Käyttäjä
  • Viestejä: 809
    • Profiili
Pitäisi luokassa alustaa 2-ulotteinen stl::vector. Pääohjelmassa alustus kääntyy ja toimii, mutta luokassa ei. Olisiko tähän olemassa joku näppärä ratkaisu, että ei tarvitsisi kirjoitaa alustusta erikseen silmukkaan.

Koodia: [Valitse]
#include <iostream>
#include <vector>

class em
{
  std::vector<std::vector<double>> m1(5,std::vector<double>(5,0));    // ei käänny
};


int main()
{
    //int n = 3; 
    std::vector<float> vect(3, 1.1);
 
    for (auto x : vect)
      {
        std::cout << x << " ";
      }

  std::vector<std::vector<double>> m1(3,std::vector<double>(3,0)); // kääntyy ja toimii
  std::cout << m1[1][1];
    return 0;
}


// tällä rivillä käännetty, voi olla jotain ylimääräistäkin, mutta tämä on vain koeohjelma

// g++ koe_01.cpp -o koe_01 -Wall -pedantic -L/usr/local/lib  -pthread -std=c++17


Muokk.

Tähän on toistaiseksi päädytty, mutta ei siitä tyylipisteitä voi antaa, eikä ole ratkaisu alkuperäiseen kysymykseen.

Koodia: [Valitse]
#include <iostream>
#include <vector>

class em
{
  public:
  std::vector<std::vector<double>> m;

  int init_m(int r, int c, double val)
  {
    std::vector<double> row;
    for(int i = 0; i < c; i++)
      { row.push_back(val);
      }
    for(int i = 0; i < r; i++)
      { m.push_back(row);
      }
    return 0;
  }

  int print_m()
  {
    for(auto& r : m )
      {
        for( auto& c : r )
          {
            std::cout << c << " ";
          }
        std::cout << std::endl;
      }
    std::cout << std::endl;
    return 0;
  }

};


int main()
{
  em m1;
 
  m1.init_m(3, 4, 123);
  m1.print_m();

  return 0;
}

// g++ koe_01.cpp -o koe_01 -Wall -pedantic -L/usr/local/lib  -pthread -std=c++17

Muokk. 2

Kääntyy ja toimii saatujen vastausten mukaan koodattaessa, kiitoksia  :)
« Viimeksi muokattu: 01.09.20 - klo:06.35 kirjoittanut teele »

nm

  • Käyttäjä
  • Viestejä: 16232
    • Profiili
Vs: c++ stl 2-ulotteisen vektorin alustus
« Vastaus #1 : 31.08.20 - klo:13.02 »
Tällainen syntaksi kääntyy:

Koodia: [Valitse]
class em
{
    std::vector<std::vector<double>> m1 = std::vector<std::vector<double>>(5, std::vector<double>(5, 0));
};

Tomin

  • Palvelimen ylläpitäjä
  • Käyttäjä / moderaattori+
  • Viestejä: 11433
    • Profiili
    • Tomin kotisivut
Vs: c++ stl 2-ulotteisen vektorin alustus
« Vastaus #2 : 31.08.20 - klo:13.09 »
Miten olisi:
Koodia: [Valitse]
class em
{
  std::vector<std::vector<double>> m1;
  em() : m1(5, std::vector<double>(5, 0)) { };
};

Tosin varmaan tuo uudempi C++ antaakin määritellä muuttujien oletusarvot luokan määrittelyssä, mutta itse olen tottunut siihen, että ne pitää antaa konstruktorissa.
Automaattinen allekirjoitus:
Lisäisitkö [RATKAISTU] ketjun ensimmäisen viestin aiheeseen ongelman ratkettua, kiitos.