(kod wrzucę jeśli uznacie, że jest do czegoś potrzebny, ale pytanie mam raczej ogólne)
Bawię się ostatnio biblioteką RapidCheck (z grubsza odpowiednik haskellowego QuickChecka czy pythonowego Hypothesis) i żeby nie musieć myśleć nad problemami, wziąłem sobie zadania z innego tematu.
I tak sobie klepię rozwiązanie, klepię testy, patrzę jak fajnie działa, aż doszedłem do zadania 5.:
Napisz program, który wyszuka i wyświetli na ekranie maksymalny element tablicy 3 x 3.
I tu drobny problem. Piszę to tak ogólnie jak tylko mogę, nie zakładając ani rozmiaru, ani typu kontenera i wykorzystując bibliotekę standardową gdzie tylko mogę i żadne rozwiązanie, które mi przychodzi na myśl, mi się nie podoba:
- Ręcznie iterować przez kontener i pod-kontener? Trochę taki XX wiek…
std::max_element
dla każdego z pod-kontenerów i potem jeszcze raz dla wyników? Brzydkie…- Własny iterator, co by przebiegał wszystkie elementy? Tyle samo klepania, jak nie więcej, jak w punkcie pierwszym…
boost::multi_array
? Też nie ma „płaskich” iteratorów (w sensie.begin()
do „lewego górnego” elementu i.end()
do „prawego dolnego” i żeby leciał po kolei)…
Jest może jakaś łatwa metoda, żeby „spłaszczyć” kolekcję kolekcji? Albo jakaś popularna biblioteka z liberalną licencją, żeby w razie czego takie coś brać? A może jest jakieś ładne rozwiązanie bez takich kombinacji, którego nie dostrzegam (jestem już po trzecim piwie…)?
multi_array
, więc jak to tworzę z czegoś, to muszę wiedzieć z czego, przynajmniej z dokładnością do rozmiaru (żaden problem) i głębokości (irytujące…). Chyba że zaś czegoś nie widzę, a to byłby znak, że czas spać i wrócić do tego jutro…reshape
, która może pozwalać na taką konwersję, ale jawną.