Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

resize().

Ostatnio zmodyfikowano 2016-03-13 12:16
Autor Wiadomość
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?
C/C++
class cMatrix
{
    int kolumny;
    int wiersze;
   
public:
    vector < vector < int >> vec;
    void rozmiar();
C/C++
void cMatrix::rozmiar()
{
    cout << "Podaj ilosc kolumn: ";
    cin >> kolumny;
    cout << "Podaj ilosc wierszy: ";
    cin >> wiersze;
    int zm = kolumny * wiersze;
    vec.resize( zm );
}
P-145915
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.
P-145916
michal11
» 2016-03-12 12:30:30
Możesz pokazać screena ew. wkleić tu cały kod żebym mógł u siebie sprawdzić ?
P-145917
Garniturek
Temat założony przez niniejszego użytkownika
» 2016-03-12 13:15:01
Konstruktor domyślny jest :)
Wklejam cały kod:
C/C++
#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 );
};
C/C++
#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;
}
C/C++
#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;
}
P-145921
mateczek
» 2016-03-12 19:08:53
C/C++
#include <iostream>
#include<vector>
using namespace std;

int main() {
    int kolumny = 50, wiersze = 100;
    //vec.resize( zm ); // tak chyba nie bardzo
    // bo rozszerzasz tylko pierwszy wektor ale już poszczególne wiersze nie !!!
    // ja bym to zrobił tak
    vector < vector < int >> vec;
    vec.resize( wiersze );
    for( vector < int > & v: vec ) {
        v.resize( kolumny );
    }
   
    cout << vec.size() << endl;
    cout << vec[ 0 ].size() << endl;
}
P-145935
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
P-145950
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.
P-145951
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ę)

C/C++
for( typ element: kontener ) {
    // pętla z automatu przebiega cały kontener
}

//ja chcąc zmieniać elemety kontenera pętlę for piszę tak

for( typ & element: kontener ) {
    //element jest referencją a nie kopią  
}

w wypadku kodu
C/C++
for( vector < int > & v: vec ) {
    v.resize( kolumny );
}
//vec - jest dwuwymiarową tablicą (wiersze i kolumny)
//v - jest elementem tablicy vec (po prostu całym wierszem)
//pętla for przebiega cały kontener vec[/code]

for c++11
zamiana małych liter na duże. Zamiana polega na odjęciu od każdego małego znaku wartości 32

C/C++
#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;
}
P-145959
« 1 » 2
  Strona 1 z 2 Następna strona