0

これは私が気づかなかったものですが、何らかの理由で次のようなことはできません

sstr << myarray;

「sstr」に「myarray」のアドレスが含まれる場合、次のようにする必要があります。

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

なぜこれが起こるのか知りたいのですが、そうしなければならなかったことを覚えていませんが、個人的には、私を苛立たせるために現実そのものが変わることがあると思います.

4

1 に答える 1

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

于 2012-12-14T14:17:38.480 に答える