resize().
Ostatnio zmodyfikowano 2016-03-13 12:16
Garniturek Temat założony przez niniejszego użytkownika |
resize(). » 2016-03-12 10:48:29 Witam, mam problem z funkcją resize(), kiedy jej użyje pojawia mi się duża przestrzeń, tak jakby kilka pustych wersów w konsoli. Mógłby mi ktoś wyjaśnić przyczynę takiego zachowania? class cMatrix { int kolumny; int wiersze; public: vector < vector < int >> vec; void rozmiar();
void cMatrix::rozmiar() { cout << "Podaj ilosc kolumn: "; cin >> kolumny; cout << "Podaj ilosc wierszy: "; cin >> wiersze; int zm = kolumny * wiersze; vec.resize( zm ); }
|
|
mokrowski |
» 2016-03-12 12:21:28 Jednym z wymogów danych trzymanych w vector jest posiadanie domyślnego konstruktora. Jak robisz resize() vector uruchamia domyślną konstrukcję obiektów w nim umieszczonych. |
|
michal11 |
» 2016-03-12 12:30:30 Możesz pokazać screena ew. wkleić tu cały kod żebym mógł u siebie sprawdzić ? |
|
Garniturek Temat założony przez niniejszego użytkownika |
» 2016-03-12 13:15:01 Konstruktor domyślny jest :) Wklejam cały kod: #include <iostream> #include <vector> using namespace std;
class cMatrix { int kolumny; int wiersze; public: vector < vector < int >> vec; void wyswietl(); void rozmiar(); void uzupelnij(); void dodawanie(); void zeros(); void ones(); void eye(); cMatrix(); cMatrix( int a, int b ); cMatrix( const cMatrix & M ); };
#include "Header.h"
int main() { cMatrix a; char z; while( 1 ) { cout << "Ustal rozmiar macierzy: 1" << endl; cout << "Uzupelnij macierz swoimi wartosciami: 2" << endl; cout << "Wyswietl macierz: 3" << endl; cout << "Zrob macierz zeros: 4" << endl; cout << "Zrob macierz ones: 5" << endl; cout << "Zrob macierz diagonalna: 6" << endl; cin >> z; switch( z ) { case '1': { system( "cls" ); a.rozmiar(); } break; case '2': { system( "cls" ); a.uzupelnij(); cout << "uzupelnione!" << endl; } break; case '3': { system( "cls" ); a.wyswietl(); } break; case '4': { system( "cls" ); a.zeros(); } break; case '5': { system( "cls" ); a.ones(); } break; case '6': { system( "cls" ); a.eye(); } break; } }; system( "pause" ); return 0; }
#include "Header.h" void cMatrix::eye() { int licznik = 0; int X = 0; for( int i = 0; i < kolumny; i++ ) { vector < int > wiersz_wektora; for( int j = 0; j < wiersze; j++ ) { X = 0; if( licznik == j ) X = 1; wiersz_wektora.push_back( X ); } licznik++; vec.push_back( wiersz_wektora ); } } void cMatrix::ones() { int X = 1; for( int i = 0; i < kolumny; i++ ) { vector < int > wiersz_wektora; for( int j = 0; j < wiersze; j++ ) { X = 1; wiersz_wektora.push_back( X ); } vec.push_back( wiersz_wektora ); } } void cMatrix::zeros() { int X = 0; for( int i = 0; i < kolumny; i++ ) { vector < int > wiersz_wektora; for( int j = 0; j < wiersze; j++ ) { X = 0; wiersz_wektora.push_back( X ); } vec.push_back( wiersz_wektora ); } } void cMatrix::wyswietl() { for( int i = 0; i < vec.size(); i++ ) { for( int j = 0; j < vec[ i ].size(); j++ ) { cout << vec[ i ][ j ] << " "; } cout << endl; } } void cMatrix::uzupelnij() { int X = 0; for( int i = 0; i < kolumny; i++ ) { vector < int > wiersz_wektora; for( int j = 0; j < wiersze; j++ ) { X = 0; cout << "Uzupelniasz " << i + 1 << " wiersz " << j + 1 << " kolumne" << endl; cin >> X; wiersz_wektora.push_back( X ); } vec.push_back( wiersz_wektora ); } } void cMatrix::rozmiar() { cout << "Podaj ilosc kolumn: "; cin >> kolumny; cout << "Podaj ilosc wierszy: "; cin >> wiersze; int zm = kolumny * wiersze; vec.resize( zm ); } cMatrix::cMatrix( const cMatrix & M ) { kolumny = M.kolumny; wiersze = M.wiersze; } cMatrix::cMatrix( int a, int b ) { kolumny = a; wiersze = b; } cMatrix::cMatrix() { kolumny = 3; wiersze = 3; }
|
|
mateczek |
» 2016-03-12 19:08:53 #include <iostream> #include<vector> using namespace std;
int main() { int kolumny = 50, wiersze = 100; vector < vector < int >> vec; vec.resize( wiersze ); for( vector < int > & v: vec ) { v.resize( kolumny ); } cout << vec.size() << endl; cout << vec[ 0 ].size() << endl; } |
|
Garniturek Temat założony przez niniejszego użytkownika |
» 2016-03-12 23:23:54 Dzięki, że chciało Ci się zagłębić w ten kod :) Nie do końca rozumiem tę pętle. To ma się wykonywać, aż v będzie dziedziczył z vec? Proszę o wyjaśnienie |
|
carlosmay |
» 2016-03-12 23:42:39 To ma się wykonywać, aż v będzie dziedziczył z vec? |
Hmm... To jest jak alokacja dwuwymiarowej tablicy (tablica tablic). vector vector'ów, w pierwszym wymiarze dodaje się następną tablicę, a w drugim wymiarze rozszerza się je. |
|
mateczek |
» 2016-03-13 06:14:30 w standardzie c++ z roku 2011 wprowadzono nową możliwość dla pętli for. Jest to duże udogodnienie gdy chcemy przelecieć cały kontener (tablicę) for( typ element: kontener ) { }
for( typ & element: kontener ) { }
w wypadku kodu for( vector < int > & v: vec ) { v.resize( kolumny ); }
for c++11 zamiana małych liter na duże. Zamiana polega na odjęciu od każdego małego znaku wartości 32 #include <iostream> #include<string>
using namespace std;
int main() { string napis { "alicja ma tyGrysa" }; for( char & znak: napis ) { if( znak >= 'a' && znak <= 'z' ) znak -= 32; } cout << napis << endl; }
|
|
« 1 » 2 |