136
Vývoj / Re:Kolko cyklov zbehne
« kdy: 13. 08. 2020, 14:35:59 »Najprv 2 iterácie filter potom sa aplikuje map a potom znovu filter.
Oprava: tým filter som myslel filtered a map = transformed.
Tato sekce Vám umožňuje zobrazit všechny příspěvky tohoto uživatele. Prosím uvědomte si, že můžete vidět příspěvky pouze z oblastí Vám přístupných.
Najprv 2 iterácie filter potom sa aplikuje map a potom znovu filter.
Je to stream api z C++.
Mohl byste jeste vyvsetlit, co znameta ten operator pipe "|". C++ syntaxi trochu znam, ale tohle si nepamatuju. V C++ bych cekal spis neco takovyhleho: boost::irange(1, 12).filtered().transformed()... Nebo je to nejak pretizenej operator?
Je to stream api z C++.
Mohl byste jeste vyvsetlit, co znameta ten operator pipe "|". C++ syntaxi trochu znam, ale tohle si nepamatuju. V C++ bych cekal spis neco takovyhleho: boost::irange(1, 12).filtered().transformed()... Nebo je to nejak pretizenej operator?
std::vector<int> result;
boost::copy(
boost::irange(1, 12)
| filtered([](const int n) { return n % 2 == 0; })
| transformed([](const int n) { return n * n; }),
std::back_inserter(result)
);Jako cvičení to může být zajímavé, ale neřeší to nic.
Už som si niečo vygooglil:Kód: [Vybrat]auto chars = make_shared<vector<char>>(initializer_list<char>{'a', 'b', 'c'});
toto posledné sa mi až tak nepáči, neni nato ešte nejaká krajšia syntax?
Trochu odbočím. vector je jedna z tříd, které takřka nedává smysl alokovat na heapu tímhle způsobem. Za nějakých 15+ let programování v c++ jsem udělal "new std::vector..." asi tak jednou a to jsem dělal hodně velkou divočinu. "new vector", "new string" a podobně je celkem spolehlivý způsob jak identifikovat špatně přeučeného Javistu.
...
Kdybys napsal, že si jen tak hraješ, tak budiž, ale ty napíšeš takový nesmysl.
To je runtime test a měl bys to vidět na první pohled.
Pozri na implementáciu std::array, tam by mala byť compile time kontrola na index do poľa pri operátore []
jednoduchy pokus:
#include <iostream>
template <typename T, int MIN, int MAX>
class Interval
{
public:
...
ráno to vyskúšam.. Diky.
A jak si představuješ, že by to mělo řešit ty skutečně zajímavé situace jakoKód: [Vybrat]hours foo = bar()
?
bar() je v jiném souboru. A výsledek závisí na I/O.
var
a: 0..23;
begin
a := 20; //ok
a := 23; //ok
a := a + 1; // ok aj keď číslo je mimo intervalu
a := 24; // chyba
type
SmallLatinLetters: 'a'..'z';
Hours: 1..12;
Minutes: 0..59;
Byte: 0..255;typedef interval<int, 1, 12> hours;
hours a = 1; // ok
a = 5; // ok
a = 12; // ok
hours b = 13; // chyba
hours c = 0; //chyba
a = 15; //chyba
Se standardní knihovnou a initializer listem kratší syntax neuděláš, můžeš ale použít variadické šablony a udělat třeba tohle:Kód: [Vybrat]Tohle používá fold expression a potřebuje C++17, ale jsou možné i jiné varianty, tady najdeš víc možností, jak to udělat: https://tristanbrindle.com/posts/beware-copies-initializer-listtemplate <typename T, typename... Args>
std::shared_ptr<std::vector<T>> make_shared_vector(Args&&... args)
{
auto vec = std::make_shared<std::vector<T>>();
vec->reserve(sizeof...(Args));
(vec->emplace_back(std::forward<Args>(args)), ...);
return vec;
}
int main()
{
auto vec = make_shared_vector<char>('a', 'b', 'c');
return 0;
}
Bude celý objekt vrátane toho memberu "objectMember" alokovaný na heape?Ano, bude uvnitř toho objektu. Ta inicializace nemá na umístění vliv, je to jen syntax sugar, abys nemusel postaru psát inicializaci do konstruktoru.
auto chars = make_shared<vector<char>>(initializer_list<char>{'a', 'b', 'c'});class MyClass {
vector<char> objectMember {'a', 'b', 'c'};
}
auto myObject = make_shared<MyClass>();shared_ptr<vector<char>> chars(new vector<char>());auto chars = make_shared<vector<char>>();shared_ptr<vector<char>> chars(new vector<char>{'a', 'b', 'c'});
#include <memory>
#include <vector>
#include <string>
using namespace std;
struct BinData {
vector<char> content{'a', 'b', 'c'}; // statické viazanie
wstring contentType{ L"text/plain" };
};
class NejakaTrieda {
shared_ptr<BinData> binData; // binData je pointer teda ukazuje na heap ale kde je vytvorený jeho member content? na stacku či heape?
NejakaTrieda() : binData(new BinData()) {
}
};
shared_ptr<NejakaTrieda> nejakyPointerNaObjekt(new NejakaTrieda());
BOOL RegisterHotKey(
HWND hWnd,
int id,
UINT fsModifiers,
UINT vk
);