Vectoren



  • 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