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

[C++] Dołączanie elementów do dwuwymiarowego wektora

Ostatnio zmodyfikowano 2017-12-26 20:15
Autor Wiadomość
SzymSzym
Temat założony przez niniejszego użytkownika
[C++] Dołączanie elementów do dwuwymiarowego wektora
» 2017-12-24 22:24:51
Napisałem klasę reprezentującą konkretne ustawienie w grze kółko i krzyżyk na dużej planszy. Prototyp klasy wygląda tak:
C/C++
class ustawienie
{
private:
    std::vector < std::vector < pole > > pola; //pole to struktura z 3 elementów - int x, int y, int zawartosc
    double priorytet;
public:
    ustawienie();
    ustawienie( std::vector < std::vector < pole > >& jakie );
    ~ustawienie() { }
    void setPoleMap( std::vector < std::vector < pole > >& jakie );
    bool czyWystepuje( int ktore, int kolumna = 0, int rzad = 0 );
    void changePrior( int change );
};

Problem leży w funkcji setPoleMap, która wygląda tak:

C/C++
void ustawienie::setPoleMap( vector < vector < pole > >& jakie )
{
    for( int i = 0; i < jakie.size(); i++ )
    for( int s = 0; s < jakie[ i ].size(); s++ )
         pola[ i ].push_back( jakie[ i ][ s ] ); //w tej linicje
   
}

Jest to prosta funkcja kopiująca wektor z argumentu do składowej pola.
Program po dojściu tutaj wywala się, natomiast debugger przeskakuje do pliku stl_vector.h, do fragmentu:

C/C++
data() const _GLIBCXX_NOEXCEPT
{ return _M_data_ptr( this->_M_impl._M_start ); }

// [23.2.4.3] modifiers
/**
       *  @brief  Add data to the end of the %vector.
       *  @param  __x  Data to be added.
       *
       *  This is a typical stack operation.  The function creates an
       *  element at the end of the %vector and assigns the given data
       *  to it.  Due to the nature of a %vector this operation can be
       *  done in constant time if the %vector has preallocated space
       *  available.
       */
void
push_back( const value_type & __x )
{
    if( this->_M_impl._M_finish != this->_M_impl._M_end_of_storage ) //konkretnie do tej linijki
    {
        _Alloc_traits::construct( this->_M_impl, this->_M_impl._M_finish,
        __x );
        ++ this->_M_impl._M_finish;
    }

Fragment jakie(i)(s) jest typu pole, natomiast pole(i) to wektor typu pole więc element powinien się dać przekopiować, jednakże tego nie robi. Czy ktoś ma pomysł w jaki sposób napisać to tak, żeby działało?
P-168091
Monika90
» 2017-12-25 12:53:17
Dlaczego nie tak
C/C++
void ustawienie::setPoleMap( const vector < vector < pole > >& jakie )
{
    pola = jakie;
}
?
P-168103
SzymSzym
Temat założony przez niniejszego użytkownika
» 2017-12-26 20:15:19
A to tak sie da xD
P-168135
« 1 »
  Strona 1 z 1