Detroq Temat założony przez niniejszego użytkownika |
tablica dwuwymiarowa » 2016-03-12 14:56:54 Hej mam pytanie czy jest możliwość wyświetlenia macierzy kwadratowej przy użyciu pojedynczej pętli for, ograniczając jej ciało do jednej instrukcji? Jeśli tak to proszę o podpowiedź jak. |
|
michal11 |
» 2016-03-12 17:33:28 Jednej instrukcji czy jednej linijki ? Zabawa indeksami i może się uda. |
|
Detroq Temat założony przez niniejszego użytkownika |
» 2016-03-12 17:49:43 jednej indukcji , tylko w jaki sposob |
|
carlosmay |
» 2016-03-12 18:24:14 std::copy() + std::ostream_iterator. Wtedy pierwszy wymiar lecisz pętlą, a drugi cały wyświetli iterator. Musiałem to klepnąć, bo nie chciałem gafy strzelić: { int tab[ 4 ][ 5 ] = { { 1, 2, 3, 4, 5 }, { 11, 12, 13, 14, 15 }, { 21, 22, 23, 24, 25 }, { 31, 32, 33, 34, 35 } }; for( auto & el: tab ) std::copy( el, el + 5, std::ostream_iterator < int >( std::cout, " " ) ); std::cout << std::endl; std::copy( & tab[ 0 ][ 0 ], & tab[ 0 ][ 0 ] + 4 * 5, std::ostream_iterator < int >( std::cout, " " ) ); } |
|
mokrowski |
» 2016-03-12 21:18:48 Jaki jest Cel i jaki jest Sens? |
|
Monika90 |
» 2016-03-13 12:35:29 std::copy( & tab[ 0 ][ 0 ], & tab[ 0 ][ 0 ] + 4 * 5, std::ostream_iterator < int >( std::cout, " " ) ); }
|
Wg jednej popularnej interpretacji standardu ten kod ma niezdefiniowane zachowanie. It must be noted, however, that a program which performs multidimensional array subscripting ``by hand'' in this way is not in strict conformance with the ANSI C Standard; according to an official interpretation, the behavior of accessing (&array[0][0])[x] is not defined for x >= NCOLUMNS.
| http://c-faq.com/aryptr/ary2dfunc2.htmlAle to powinno być OK #include <iostream>
int main() { int tab[ 4 ][ 5 ] = { { 1, 2, 3, 4, 5 }, { 11, 12, 13, 14, 15 }, { 21, 22, 23, 24, 25 }, { 31, 32, 33, 34, 35 } }; for( std::size_t i = 0; i < sizeof( tab ) / sizeof( int ); ++i ) std::cout << * reinterpret_cast < const int *>( reinterpret_cast < const char *>( & tab ) + i * sizeof( int ) ) << ' '; }
Pobieramy adres całej tablicy, traktujemy ją jako tablicę bajtów, przeliczamy adresy ręcznie i rzutujemy tak wyliczony adres z powrotem na wskaźnik do int. |
|
Detroq Temat założony przez niniejszego użytkownika |
» 2016-03-13 18:15:51 Dzięki wielkie za odpowiedz , to było takie zadanie ciekawostka od prowadzącego i nie dawalo mi to spokoju, ale na razie nie rozumiem jak to sie odbywa musze jeszcze uzupełnic wiedze, a drugiej strony jakby wygladala ta komenda na macierzy charow ? |
|
carlosmay |
» 2016-03-13 19:30:53 a drugiej strony jakby wygladala ta komenda na macierzy charow ? |
Tak samo, tylko z innym typem przechowywanych danych, lub prościej (bo char * to typ całego wiersza), więc była by to tablica wierszy. { char tab[ 4 ][ 5 ] = { { "jaki" }, { "inny" }, { "loki" }, { "maly" } }; for( auto & el: tab ) std::copy( el, el + 5, std::ostream_iterator < char >( std::cout ) ); std::cout << std::endl; for( char * el: tab ) std::cout << el << ' '; std::cout << std::endl; for( std::size_t i = 0; i < 4; ++i ) std::cout << tab[ i ] << ' '; std::cout << std::endl; } |
|
« 1 » |