Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » welcher stl container?

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: [ 1 ] > 2 < [ 3 ]
010
15.08.2007, 18:35 Uhr
Kest
saint


Hi!

Wenn ich deine Problemstellung richtig verstanden habe, dann würde das auch nicht gehen, außer du erstellst einen Wrapper für double und verpasst ihm und my_struct eine gemeinsame Basis.
Dann würde das ganze aber nicht gerade >gut< für zeitkritische Anwendung.
--
Wenn man einen Hufschlag hört, sollte man >Pferd< denken und nicht >Zebra<.

Dieser Post wurde am 15.08.2007 um 18:36 Uhr von Kest editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
011
15.08.2007, 18:37 Uhr
~testo
Gast


hmm. das würde mich jetzt aber wundern dass das überhaupt nicht ginge ....
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
012
15.08.2007, 18:48 Uhr
Kest
saint


Doch, so wie ich dir grad gesagt habe.
Denn:
Zitat von ~testo:

"normale" double werte als auch strukturen


was hat denn double mit einer Struktur - vor allem in C++ - gemeinsam?
--
Wenn man einen Hufschlag hört, sollte man >Pferd< denken und nicht >Zebra<.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
013
15.08.2007, 19:11 Uhr
0xdeadbeef
Gott
(Operator)


Was theoretisch ginge, wäre, eine union zu benutzen, oder du benutzt nen void* und castest das entsprechend. Beides sind aber ziemlich dreckige Hacks, und je nachdem, was du da eigentlich erreichen willst, solltest du besser das eine oder andere streichen, oder refaktorisieren.

Was ist eigentlich die genaue Problemstellung?
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
014
15.08.2007, 19:59 Uhr
~testo
Gast



Zitat:
was hat denn double mit einer Struktur - vor allem in C++ - gemeinsam?


naja - eigentlich nichts...


Zitat:

Was ist eigentlich die genaue Problemstellung?



ok ich versuche es nochmals ganz genau:

ich habe ein programm geschrieben, es ging dabei vor allem um geschwindigkeit, es läuft und alles ist prima. Was es tut ist egal.
Ich lese ein file ein in dem double werte zeile pro zeile eingetragen sind. In der ersten zeile der files steht dass es sich um real input handelt.

ich will das programm jetzt so umschreiben dass auch files eingelesen werden die complex input haben - diese files haben 2 double werte pro zeile.

ich rufe später dann mal bibliotheksfunktionen auf die für den real input ein array aus doubles erwarten. Jetzt für den complexen input wird dann eine bibliotehksfunktion aufgerufen die ein array erwartet welches eine complex struktur trägt. also alle elemente jeweils eine complex struktur aus 2 double werten.

meine klassen sind wie ich sie vorher im vorigen post beschrieben habe. Ich habe eine Matrix- klasse die eine Lines klasse trägt bzw. eienn pointer drauf. Und in der Lines klasse liegt im Moment ein double array. dieses double array würde ich gerne so umformen dass ich von meinem hauptstrang einfach über das file (das ja real oder complex sein kann) mit if - else einfach die Matrix->Lines->arr so initialisiere/fülle wie der input ist. d.h das array wird entweder nur mit double werten gefüllt oder nur mit der complex-struktur.
dazu wollte ich das array in ein std::vector ändern - nur bin ich einfach zu dumm dazu - ich abe bisher noch nie mit templates gearbeitet und das lesen von dokumentation hilft mir einfach nicht weiter.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
015
15.08.2007, 20:03 Uhr
0xdeadbeef
Gott
(Operator)


Das kommt mir irgendwie bekannt vor. Du solltest die Antworten zu deinen Threads auch lesen...

www.fun-soft.de/showtopic.php?threadid=18453
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
016
15.08.2007, 20:13 Uhr
~testo
Gast


Richtig.

leider kann ich solche Antworten nicht wirklich nachvollziehen - und außerdem war dieser thread eher ganz anders gedacht als er jetzt ausgeartet ist - so dass ich jetzt wieder da stehe wo ich angefangen habe.

zu deiner antwort:

so müsste ich ja wirklich den kompletten code 2mal schreiben. Sogar meine datenstrukturen müsste ich damit doppelt schreiben - da gibt es doch sicherlich eine elegantere lösung
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
017
15.08.2007, 20:51 Uhr
0xdeadbeef
Gott
(Operator)


So musst du nur da, wo der Code sich tatsächlich unterscheidet, anderen Code schreiben. Das musst du so oder so.

Wenn dus mit zwei unterschiedlichen Datentypen in der selben Variable versuchst, handelst du dir erstens nur viele unnötige Fehlerquellen ein, und zweitens dann wirklich das ganze Programm quasi doppelt schreiben.
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
018
15.08.2007, 20:57 Uhr
~testo
Gast



Zitat:

So musst du nur da, wo der Code sich tatsächlich unterscheidet, anderen Code schreiben. Das musst du so oder so.




ich danke für die Geduld aber es tut mir leid - ich verstehe leider nicht was du meinst...ich glaube ein wenig erklärender code würde mir helfen...
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
019
16.08.2007, 00:49 Uhr
~testo
Gast


also ich habe es jetzt so gemacht und es funktionert.
Ich wäre froh wenn mir jemand sagen könnte ob es günstiger geht bzw. ob ich da völligen schwachsinn gemacht habe....danke


main.cpp

C++:
//file includings
#include "Matrix.h"



//C++ includings
#include <iostream>
#include <stdexcept>

#include <vector>


//Macros
#define EXIT_FAILURE 1



int main(int argc, char *argv[])
{
    std::cout << "jjj" << std::endl;

    int a = 2;
    

    
//     MatrixImpl * m_impl;
    
    
    if ( a == 1)
    {
        Matrix<double> *A;
        std::cout << "a = 1: reell" << std::endl;
    

        Compressed_Lines<double> o_cl;
        Compressed_Lines<double> *lines = o_cl.New_Compressed_Lines(5);
        
        
        A->c_lines = lines;
        A->c_lines->col_buf[0] = 9.987;
        
        std::cout << A->c_lines->col_buf[0] << std::endl;

    }
    else
    {
        std::cout << "a = 0: complex" << std::endl;
//         ob_matrix.loadImpl(new Compressed_Lines<int>);
        
        Matrix<COMPLEX> *A;
    

        Compressed_Lines<COMPLEX> o_cl;
        Compressed_Lines<COMPLEX> *lines = o_cl.New_Compressed_Lines(5);
        
        COMPLEX complex;
        
        complex.real = 1.55556;
        complex.imag = 8.334;
        
        
        A->c_lines = lines;
        A->c_lines->col_buf[0] = complex;
        
        std::cout << A->c_lines->col_buf[0].real <<  " " << A->c_lines->col_buf[0].imag << std::endl;
        
        
        
        
    }
    
    
    return EXIT_SUCCESS;
}



Matrix.h

C++:
class Abstract_Matrix
{
    public:
    
            /// Number of columns/rowd
        int n;                          
              
        
        void Init_Matrix(Abstract_Matrix *A);
        
        
        Abstract_Matrix* New_Matrix();
};


struct COMPLEX
{
    double real;
    double imag;
};


template <class T>
class Matrix : Abstract_Matrix
{
    public:
        
        /// The columns and rows of the submatrix
        Compressed_Lines<T> *c_lines;      
        
        
        void Init_C_Lines(int nmb)
        {
            c_lines = NULL;
//             c_lines = NULL;    
//             c_lines[0] = 8.99;
        }
};
#endif



Compressed_Lines.h

C++:
template<class T>
class Compressed_Lines
{
  
    public:        
        
        Compressed_Lines<T>(){}
        
        ~Compressed_Lines<T>(){}
        
        // This 2D array holds the column-arrays named A_buf
        std::vector<T*> arr;
        
        // This is the buffer array which hold the values of the specific
        // column of the matrix, it is accessed via the pointers of A.
//         std::vector<T> col_buf;
        T*    col_buf;
        
        
        Compressed_Lines<T>*
        New_Compressed_Lines(int nbr_cols)
        {
            Compressed_Lines<T> *cls;
    
            cls = new Compressed_Lines<T>();    
            
            
//             cls->col_buf.push_back(3.3);
//             cls->col_buf.push_back(4.3);
            cls->col_buf = new T[nbr_cols];
            

            return cls;
        }
                
    private:

        void     Init_Compressed_Lines(Compressed_Lines<T> *cls,
                                      int nbr_cols);
};
#endif

 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: [ 1 ] > 2 < [ 3 ]     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: