Iterator bändigen



  • #include <iostream>
    #include <stdio.h>
    #include <cmath>
    #include <vector>
    using namespace std ;
    int i;
    int Nr=1;
    int pzz=0;
    int vfz=0;
    int grenze=1000;
    int schritt=30;
    
    int pz_test(int param)//Funktion selber
    {
        for (i = 2; i < param; i++)
        {
            if (param%i == 0)
                break;
        }
        if(i==param)
        {pzz=pzz+1; return 1;}
        else
        {vfz=vfz+1; return 2;}
    }
    int main(int argc, const char * argv[])
    {
        vector<int>werte(grenze/schritt*5);
    
        for (int x=1;x<=grenze;x=x+schritt)
        {
            werte.push_back(Nr);
            werte.push_back(x);
            werte.push_back(pz_test(x));
            werte.push_back(pzz);
            werte.push_back(vfz);
            Nr++;
        }
            for (std::vector<int>::iterator it = werte.begin() ; it != werte.end(); ++it)
                cout << ' ' << *it;
            cout <<"ixi "<<werte[1]<<'\n';    
        werte.clear();
        return 0;
    }
    

    habe 2 Probleme
    1. Er macht was er soll, aber ich möchte den Iterator so, daß er nach der Ausgabe von fünf Werten eine neue Zeile macht.

    2. Wo kommen die vielen Nullen her am Anfang der Ausgabe. Er scheint sie trotz des clears nicht zu löschen?

    3. Wann kommt das "std::" vor einen Befehl und wann nicht?

    Danke



  • Falsches Unterforum, deine Code ist C++ (abgesehen von stdio.h, denn das ist C) und nicht C++/CLI.

    Sonne55 schrieb:

    1. Er macht was er soll, aber ich möchte den Iterator so, daß er nach der Ausgabe von fünf Werten eine neue Zeile macht.

    Das kannst du realisiern, indem du die 5 Werte zusammenfasst - z.B. in einer Struktur (struct). Siehe hier: http://ideone.com/quNZDk

    Sonne55 schrieb:

    2. Wo kommen die vielen Nullen her am Anfang der Ausgabe. Er scheint sie trotz des clears nicht zu löschen?

    Die Nullen am Anfang kommen daher, dass du deinen std::vector<..> mit eine Zahl initialisierst (=grenze/schritt*5=166). Dieser Konstruktor erzeugt nämlich die übergeben Anzahl an default initialisierten Elementen - in deinem Fall Nullen.
    Siehe hier: http://en.cppreference.com/w/cpp/container/vector
    Im oben erwähnten Beispiel habe ich das schon korrigiert.

    Sonne55 schrieb:

    3. Wann kommt das "std::" vor einen Befehl und wann nicht?

    Dass muss grundsätzlich dorthin, wenn sich ein Typ oder eine Funktion (oder Befehl, wie du es nennst) in diesem Namespace befindet. Es muss nicht dorthin, wenn sich die Funktion über ADL (Argument Dependent Lookup) auflösen lässt oder die Funktion bzw. der Typ im selben Namespace angewendet wird. Auch wenn der Namespace (oder Typ) per using namespace bzw. using Direktive eingebunden wird, ist es (meistens) nicht nötig. Das einbinden von Namespaces in Headern ist allerdings Bad-Practice, denn es verhindert den Zweck von Namespaces und führt schnell zu Namenskonflikten.



  • Dein Programm macht mich weinen.

    #include <iostream>
    #include <vector>
    
    struct WERTE
    {
    	int Nr;
    	int x;
    	int pztest;
    	int pzz;
    	int vfz;
    };
    
    int pz_test(int param, int& pzz, int& vfz)//Funktion selber
    {
    	int i=2;
    	for (; i < param; i++)
    	{
    		if (param%i == 0)
    			break;
    	}
    	if(i==param)
    		{++pzz; return 1;}
    	else
    		{++vfz; return 2;}
    }
    
    int main(int argc, const char * argv[])
    {
    	std::vector<WERTE>werte;
    
    	int grenze=1000;
    	int schritt=30;
    	int Nr=1;
    	int pzz=0;
    	int vfz=0;
    
    	for (int x=1;x<=grenze;x=x+schritt)
    	{
    		WERTE tmp;
    		tmp.Nr=Nr++;
    		tmp.x=x;
    		tmp.pztest=pz_test(x, pzz, vfz);
    		tmp.pzz=pzz;
    		tmp.vfz=vfz;
    		werte.push_back(tmp);
    	}
    	for (std::vector<WERTE>::const_iterator it = werte.begin(); it != werte.end(); ++it)
    	{
    		std::cout << it->Nr << ' ' << it->x << ' ' << it->pztest << ' ' << it->pzz << ' ' << it->vfz << '\n';    
    	}
    	return 0;
    }
    


  • Danke, muß es erste studieren, habe aber inzwischen alles alleine gelöst, wenn auch sicher nicht so elegant...


Anmelden zum Antworten