这是我从未注意到的事情,但由于某种原因你不能做类似的事情
sstr << myarray;
如果你这样做“sstr”将包含“myarray”的地址,你必须这样做
for(int i;i < sizeof(myarray);i++)
{
sstr << myarray[i];
}
我想知道为什么会发生这种情况,我不记得曾经这样做过,但我个人认为有时现实本身会改变只是为了惹恼我。
这是我从未注意到的事情,但由于某种原因你不能做类似的事情
sstr << myarray;
如果你这样做“sstr”将包含“myarray”的地址,你必须这样做
for(int i;i < sizeof(myarray);i++)
{
sstr << myarray[i];
}
我想知道为什么会发生这种情况,我不记得曾经这样做过,但我个人认为有时现实本身会改变只是为了惹恼我。
您需要为数组定义自己的流操作才能显示它。
#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