2012-10-07 23 views
0

這是我從來沒有注意過,但由於某種原因,你不能這樣做傳球達陣,以字符串流

sstr << myarray; 

如果你這樣做「SSTR」將包含「myArray的」地址,您會要做

for(int i;i < sizeof(myarray);i++) 
{ 
sstr << myarray[i]; 
} 

我想知道爲什麼發生這種情況,我不記得曾經有這樣做,但我個人覺得有時候現實本身只是改變煩擾我。

+0

你甚至沒有寫變量的聲明。或者你得到的結果和想要的結果。嘗試重新構思您的問題可能有助於解答問題。 – penelope

回答

0

您需要爲陣列定義自己的流操作才能顯示它。

#include <iostream> 
#include <vector> 
using namespace std; 

template <typename T> 
class mydata 
{ 
public: 
    mydata(int size = 0) { for (int i = 0; i < size; i++) add(0); } 
    ~mydata() { } 
    void add(T x) { data.push_back(x); } 
    void remove(int pos) { data.erase(data.begin() - pos); } 
    T& operator[](int pos) { return data[pos]; } 
    friend ostream& operator<<(ostream& os, const mydata<T>& name) { 
     for (int i = 0; i < x.data.size(); i++) os << x.data[i] << " "; return os; } 
private: 
    vector<T> data; 
}; 

這將是一個封裝您的數據的標準類。如果您想要執行像mydata<int> b(8); b[7] = 8;這樣的操作,您可以。 <運算符的代碼在類內的原因是模板需要類型名特定的代碼才能在模板本身內。

最後,這是代碼如何實現的。

int main() 
{ 
    mydata<char> charData; 
    mydata<int> intData; 
    for (int i = 0; i < 20; i++) { 
     charData.add(65+i); 
     intData.add(i); 
    } 
    cout << charData << endl; 
    cout << intData; 
    cin.get(); 
    return 0; 
} 

輸出看起來是這樣的:
A B C D E F G H I J K L M N O P Q R S T
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19