2013-02-01 26 views
8

Ho problemi con la mia funzione di stampa del vuoto per stampare questo vettore. . Io non sono molto sicuro di cosa si sta parlando con "std :: allocator ricevo questi errori:Come stampare elementi in un vettore C++

st1.cpp: In function ‘void Print(std::vector<int, std::allocator<int> >)’: 
st1.cpp:51: error: declaration of ‘std::vector<int, std::allocator<int> > v’ shadows a  parameter 

Ecco il file:

#include <iostream> 
#include <string> 
#include <vector> 
#include <stack> 
#include <algorithm> 
using namespace std; 

void Initialize(); 
void Print(); 

int main() 
{ 
stack<string> s1, s2; 
s1.push("b"); 
s2.push("a"); 

if (s1.top() == s2.top()) 
{ 
    cout << "s1 == s2" << endl; 
} 
else if (s1.top() < s2.top()) 
{ 
    cout << "s1 < s2" << endl; 
} 
else if (s2.top() < s1.top()) 
{ 
    cout << "s2 < s1" << endl; 
} 
else 
{ 
    return 0; 
} 

vector<int> v; 
Initialize(); 
Print(); 
} 

void Initialize(vector<int> v) 
{ 
int input; 
cout << "Enter your numbers to be evaluated: " << endl; 
while(input != -1){ 
    cin >> input; 
    v.push_back(input); 
    //write_vector(v); 
} 
} 

void Print (vector<int> v){ 
vector<int> v; 
for (int i=0; i<v.size();i++){ 
    cout << v[i] << endl; 
} 
} 

voglio solo stampare v fuori a lo schermo. Qualsiasi aiuto?

+0

Hai guardato al posto dei punti compilatore troppo? –

risposta

7

dichiarazione della funzione e la definizione non sono coerenti, si desidera generare vettore da Initialize, si può fare:

void Initialize(vector<int>& v); 

Per stampare vettore:

void Print(const vector<int>& v); 

Ora si chiama:

vector<int> v; 
Initialize(v); 
Print(v); 

Non dimenticare di modificare la definizione della funzione di Initialize, Print per abbinare la nuova firma che ho fornito sopra. Inoltre si stanno ridefinendo una variabile locale v che ombre parametro di funzione, non vi resta che commentare questa linea, anche passare vettore da ref const:

void Print (const vector<int>& v){ 
    //vector<int> v; 
    for (int i=0; i<v.size();i++){ 
    cout << v[i] << endl; 
    } 
} 
+0

Come lo chiamerei dal principale? void Print (vector v)? – TheNameHobbs

+0

vedere la mia risposta aggiornata – billz

7

devi passare per riferimento const e rimuovere il vettore estranea.

void Print(const std::vector<int>& v){ 
    for(unsigned i = 0; i< v.size(); ++i) { 
     std::cout << v[i] << std::endl; 
    } 
} 

Un altro modo per stamparlo sarebbe quella di utilizzare iteratori in questo modo:

void Print(const std::vector<int>& v) { 
    std::vector<int>::iterator it; 
    for(it = v.begin(); it != v.end(); ++it) { 
     std::cout << (*it) << '\n'; 
    } 
} 

O in C++ 11 si può fare in questo modo:

void Print(const std::vector<int>& v) { 
    for(auto& i : v) 
     std::cout << i << '\n'; 
} 

non credo che la vostra funzione Initialize() funziona come ci si aspetta a. Sembra solo fare una copia e poi la scarta, non modificando alcun valore del vettore esistente.

+0

Egli non deve passare per riferimento const. –

+0

Vero, ma è un buon consiglio per la correttezza const poiché non sta modificando nulla nella funzione. – Rapptz

Problemi correlati