Vectoren



  • C++ Reference.
    Suchst du vector, guckst du member.



  • MaximGast schrieb:

    das heisst jedes Mal muss ermittelt werden wie viel Vektoren habe ich und wie lange jeden Vektor 😞

    Das verstehe ich nicht. Wenn alle vectors Einzelgänger sind, dann sind es doch immer gleich viele vectors. Das musst du ja hartcodiert haben. Wieso musst du das dann jedes Mal ermitteln? Wenn es hartcodiert ist, sind es doch jedes mal gleich viele?



  • Und wenn das hartcodiert ist, ist das natürlich ziemlich doof. Dann musst du das wohl so machen:

    #include <numeric>
    #include <vector>
    using namespace std;
    
    int main()
    {
    	vector<int> v1(10);
    	iota( begin(v1), end(v1), 10);
    	vector<int> v2(10);
    	iota( begin(v2), end(v2), 20);
    	vector<int> v3(10);
    	iota( begin(v3), end(v3), 30);
    	vector<int> v4(10);
    	iota( begin(v4), end(v4), 40);
    	vector<int> v5(10);
    	iota( begin(v5), end(v5), 50);
    
        // Hier gehts für dich los:
    	unsigned size = v1.size() + v2.size() + v3.size() + v4.size() + v5.size();
    	vector<int> all;
    	all.reserve( size );
    	all.insert( end(all), begin(v1), end(v1) );
    	all.insert( end(all), begin(v2), end(v2) );
    	all.insert( end(all), begin(v3), end(v3) );
    	all.insert( end(all), begin(v4), end(v4) );
    	all.insert( end(all), begin(v5), end(v5) );
    }
    


  • Der Anzahl der Vektoren ergibt sich nach einen bestimmten Messvorgang.
    zb Mess1:--> v1,v2,v3,v4
    Mess 2:--> v5,v6,v7,v8
    ....

    Meine Vorhaben ist:
    Wenn ich bei Mess1 bin wollte ich alle Vektoren in einen einzigen vektor haben, damit ich noch eine andere Filter einsetzen kann.



  • Zeig mir mal deinen aktuelle Quellcode, wo du deine vectoren erstellst usw.



  • Die Vektoren werden erstmal hier erstellt:

    template< typename T >
    vector< vector< T > > foo(vector< T > const & input )
    {
        typedef vector< T >::size_type size_type;
    
        size_type const size = input.size() - 1;
        vector< vector< T > > result( size );
        vector< T > current( size );
    
        for( size_type i = 0; i < size; result[ i ] = current, current.resize( size - ++i ) )
            for( size_type k = 0; k < size - i; ++k )
                current[ k ] = input[ i + k + 1 ] - input[ k ];
    
        return result;
    }
    

    dann rufe ich diese Methode in main() Fkt:

    std::vector< std::vector< int > > result = foo( hilfs_vector );
    for( std::vector< std::vector< int > >::size_type i= 0; i < result.size(); ++i ){
    
            std::cout << "Delta " << i << ": ";
    		ausgabe(result[i]);
            std::cout.put( '\n' );
        }
    

    --> Der Anzahl der Vektoren ist gleich der Anzahl von i bzw Delta.
    Meine ausgabe() sieht so aus:

    void ausgabe(vector<int>&v)
    {
    	vector<int>::iterator iNext = v.begin();
    	vector<int>::iterator iEnd = v.end();
    	while(iNext < iEnd)
    	{
    		cout << " " <<*iNext++ << " ";
    	}
    	cout << endl;
    }
    


  • Also doch keine Einzelgänger, wenn sie alle in einem Container liegen...

    Also du willst das hier?

    vector<int> concatenate_vectors( const vector<vector<int>>& v )
    {
    	unsigned size = 0;
    	for( auto it=begin(v); it!=end(v); ++it, size+=it->size() );
    
    	vector<int> concatenate;
    	concatenate.reserve( size );
    	for( auto it=begin(v); it!=end(v); ++it, concatenate.insert(end(concatenate),begin(*it),end(*it)) );
    	return concatenate;
    }
    
    int main()
    {
    	// ...
    	vector<int> concatenate = concatenate_vectors( result );
    }
    


  • Huch, die beiden Teile musst du noch vertauschen.

    for( auto it=begin(v); it!=end(v); size+=it->size(), ++it );
    


  • Ach genau so was brauche ich 😃 .
    Es ist echt schwierig geschrieben vor allem wenn man Anfänger ist aber trotzdem nicht schlecht.
    Danke



  • @out welche beide Teile?



  • MaximGast schrieb:

    @out welche beide Teile?

    Die beiden hinteren Teile der for-Schleife. Schau sie dir in meinem ersten Post an, dann in meinerm Korrekturpost.



  • vector<int> concatenate_vectors( const vector<vector<int>>& v )
    {
        unsigned size = 0;
        for( auto it=begin(v); it!=end(v); ++it, concatenate.insert(end(concatenate),begin(*it),end(*it)));
    
        vector<int> concatenate;
        concatenate.reserve( size );
        for(auto it=begin(v); it!=end(v); ++it, size+=it->size());
        return concatenate;
    }
    

    in der main Methode:

    int main()
    {
    	std::vector< std::vector< int > > result;
    	vector<int> concatenate = concatenate_vectors( result );
    
    }
    

    sorry... 😞



  • Den Komma-Operator zu verwenden ist nicht cool oder so.



  • @MaximGast: Was meinst?

    @Furble Wurble: Meinst du mich? 😃 Eigentlich stimme ich dir zu. Ich mag ihn auch nicht wirklich, außer in for-Schleifen. In for-Schleifen finde ich ihn durchaus nuützlich.



  • out schrieb:

    @Furble Wurble: Meinst du mich? 😃

    Auch. Aber nicht nur.
    Der Thread strotzt vor Kommas.



  • ...



  • Ich Kriege das nicht zum laufen
    Ich weiß es nicht bin zu ...... 😞



  • Trotz die Änderung,die du mir vorgeschlagen hast
    Concatenate ist ihm nicht bekannt
    Ich habe Visual Studio 2010



  • ahhhh
    ich habe es jetzt in dem ich :

    for( std::vector< std::vector< int > >::size_type i= 0; i < result.size(); i++ )
       {
    	    result[0].insert(result[0].end(),result[i].begin(),result[i].end());
       }
    

    und dann

    result[0].erase(result[0].begin(),result[0].begin()+size_result0);
    

    Ich bin halt anfänger 😉



  • Hallo alle zusammen,

    ich möchte mich bei alle bedanken, die mich bei alle Fragen geantwortet haben und damit habe fertig:-).


Anmelden zum Antworten