Ubuntu Suomen keskustelualueet
Ubuntun käyttö => Ohjelmointi, palvelimet ja muu edistyneempi käyttö => Aiheen aloitti: teele - 31.08.20 - klo:10.13
-
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.
#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.
#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 :)
-
Tällainen syntaksi kääntyy:
class em
{
std::vector<std::vector<double>> m1 = std::vector<std::vector<double>>(5, std::vector<double>(5, 0));
};
-
Miten olisi:
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.