Visualizzazione dei risultati da 1 a 8 su 8

Discussione: [C++] Iteratori su int

  1. #1

    [C++] Iteratori su int

    Salve avrei un problema ovvero

    codice:
    list <int> a; // mia lista con 4 elementi inseriti "4 3 2 1"
    list <int> ::iterator i_1; // iteratone che dovrebbe gestire la mia lista
    
    
    for(int i=2;i>0;i--){
    //???? qui dovrei gestire il mio iteratore e la lista in modo che "i_1" prenda a ogni passo il valore di "i"
    
    //successivamente dovrei modificare il valore dell'elemento della lista con indice "i" in un altro valore ad esempio 3
    
    }


    in pratica il mio problema e come dare all' iteratore il valore che ha "i" ad ogni passo, e in oltre come faccio a sovrascrivere un valore ad esempio 3 all' elemento presente all' indice 1 della lista ?


    thx 1000

  2. #2
    Benvenuta nel forum di HTML.it

    Per assegnare un contenuto ad una lista si deve usare il metodo assign:
    codice:
    a.assign(i);
    .


    Ciao

  3. #3
    ma

    codice:
    a.assign(i)

    lo provato ora ma se lo uso con 1 solo parametro come lo usi te mi da errore, con due invece

    a.assign(2,3);

    mi scrive il valore 3 sui primi 2 elementi mentre io ho bisogo che mi scriva il valore 3 solo alla posizione 2 ad esempio

  4. #4
    Hai ragione, sono andato a memoria..

    In effetti il metodo è un altro: ecco la spiegazione
    http://www.cplusplus.com/reference/stl/list/insert/


    Ciao

  5. #5
    grazie =)


    tuttavia nn ho ancora capito come impostare l0indice di un iteratore in base a una mia variabile


    tipo iteretor it e a 0


    int i =2;


    come faccio a impostare it=2 ?


    ho provato con *it=i;


    ma mi da errore sulla ridefinizione dell' iteratone stesso !


    thx =)

  6. #6
    up ?


    è importante sorry

  7. #7
    Non ho capito, vuoi scorrere la lista e assegnare a ciascun elemento la corrispondente posizione? O vuoi spostare l'iteratore in modo che punti all'elemento i-esimo?
    Amaro C++, il gusto pieno dell'undefined behavior.

  8. #8
    in pratica ho un for che parte da N/2 e arriva a n-1

    il mio iteratore deve prendere il valore dell' indice del for quindi Iteratore_1= i;

    successivamente il mio iteratore deve puntare a un nodo di una lista e modificare il valore in esso contenuto ad esempio da 2 a 3



    codice:
    #include <iostream>
    //#include <vector>
    #include <iterator>
    #include <vector>
    using namespace std;
    
    
    class Merg{
        private:
            vector <int> a;
            vector <int> b;
    		vector <int> ::iterator i_1;
    		vector <int> ::iterator j_1;
    		vector <int> ::iterator k_1;
    		int left;
            int center;
            int right;
    	public:
    		void mergesort(vector <int> &a, int left, int right);
            void merge( vector <int> &a, int left, int center, int right);
    		void stamp(vector <int> &);
            Merg();
    };
    
        Merg::Merg(){
            cout<<"Inserisco I valori"<<endl;
    		a.push_back(4);
    		a.push_back(3);
    		a.push_back(2);
    		a.push_back(1);
    		cout<<"End del Vettore = "<<a.size()<<endl<<"Vettore disordinato"<<endl;
    		//stamp(a);
    		mergesort(a,0,(a.size()-1));
    		cout<<"Vettore ordinato"<<endl;
    		//stamp(a);
    		stamp(b);
    	};
    
    	
    void Merg::merge(vector <int> &a, int left, int center, int right){
    	int n=a.size(),i,j,k; 
    		
    	for ( i = center+1; i > left; i--){
    		//b[i-1] = a[i-1];
    //il mio iteratore i_1 deve prendere il valore di i
    per poi andare a puntare  all' indirizzo del vettore b[i-1]e modificare il mio valore  
    	}
    		
    		
    	for (j = center; j < right; j++){
    		//b[right+center-j] = a[j+1];
    	}	
    
    	for (k = left; k <= right; k++){ 
    		if (b[j] < b[i]){
    			//a[k] = b[j--];
    		}else{ 
    			//a[k] = b[i++];
    		}
    	}
    
    };
    
    
    void Merg::mergesort(vector <int> &a, int left, int right) {
    	if (left<right) { 
    		int center = (left+right)/2; 
    		mergesort(a, left, center); 
    		mergesort(a, center+1, right);
    		merge(a, left, center, right);
    	}

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.