2013-02-01 4 views
8

Bu vektörün çıktısını almak için boşluk yazdırma işlevimde sorun yaşıyorum. . Ben "std :: ayırıcısı ile bahsettiğini pek emin değilim ben bu hataları alıyorum: Ben sadece dışarı v yazdırmak istediğinizBir vektördeki elemanlar nasıl yazdırılır C++

#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; 
} 
} 

: Burada

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 

dosyasıdır ekranı. Herhangi bir yardım?

+0

çok yerde derleyici noktalarını baktın mı: Ayrıca size sadece ayrıca, satırı yorum const ref tarafından vektör geçmesi gerekiyor, fonksiyon parametresini gölgeler yerel bir değişken v yeniden tanımlıyor? –

cevap

7

, sen Initialize gelen vektörü oluşturmak istiyorum, bunu yapabilirsiniz: Görüşme Şimdi

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

:

void Initialize(vector<int>& v); 

vektör yazdırmak için

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

işlev tanımını değiştirmeyi unutmayın., Print, yukarıda sağlanan yeni imzamı eşleştirmek için.

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

Bunu ana telefondan nasıl arardım? void Yazdır (vektör v)? – TheNameHobbs

+0

Güncellenmiş cevabımı görün – billz

7

Dışarıdan gelen vektör const referans olarak geçmek ve kaldırmak zorundayız.

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

diğer bir yolu şöyle iteratörler olacaktır çıktısını:

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

Veya C++ 11'de bunu şöyle yapabilirsiniz:

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

Ben senin Initialize() işlev beklediğiniz gibi çalışır sanmıyorum bunu. Sadece bir kopyasını oluşturuyor ve sonra var olan vektörün herhangi bir değerini değiştirmiyor. İşleviniz beyanı ve tanımı tutarlı değildir

+0

Yapı referansı ile bir to_ geçişi yapmıyor. –

+0

Doğru, ancak işlevdeki hiçbir şeyi değiştirmediğinden yapının doğruluğu konusunda iyi bir tavsiyedir. – Rapptz