C++文件输出的问题

liangtian_81 2007-04-30 04:31:46
为了测试自己写的vector容器类,在执行插入,删除等操作后要输出结果,写了这样一个函数模板:
template<class T> void outPutVectorMember(vector<T>& vect){
if (vect.size()>0)
{
for (int i=0;i<vect.size();i++){
std::cout<<i<<": "<<";
}
else
{
std::cout<<"vector is Null!"<<"\n";
}
}
问题是,如果处理的都是简单类型的话就没问题,但如果类型是个结构体等复杂类型的话(例如 typedef struct _vectMem{int a;char ch;}vectMem),编译时vect.at(i)这条语句通不过。因为这时vect.at(i)得到的只是复杂类型的一个对象。
用C++,该怎么样去写一个能同时支持简单,复杂类型数据输出的函数呢。还有要写到文件里又该怎样写呢。谢谢各位高手指点一二。
...全文
302 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
herman~~ 2007-05-01
  • 打赏
  • 举报
回复
重载T的<<自然是要
而且应该这样使用感觉比较好copy(vect.begin(),vect.end(),ostream_iterator<T>(cout," "));

liangtian_81 2007-05-01
  • 打赏
  • 举报
回复
还有一个想请教各位高手的问题:
template<class T> void printVector(vector<T>& vect,FILE* pFile){
for(int i= 0; i<vect.size();i++){
cout<<i<<" "<<vect.at(i)<<endl<<" "<<endl;//"<<"已重载
fprintf(pFile,"%d\n ","%s",i,(vect.at(i)));//???
}
}
想把结果同时输出到文件,上面问号的语句是不对的,这里不能用格式化输出,因为vect.at(i)所取得的值是不一定的,可能是int,也可能是char等,有没有什么别解决方法。
liangtian_81 2007-05-01
  • 打赏
  • 举报
回复
谢谢各位,问题基本解决了,重载了“<<”:
ostream& operator<<(ostream& out,const vectMem& st){
//具体输出
return out;
}
JULY2006 2007-05-01
  • 打赏
  • 举报
回复
重载操作符"<<"
yuyunliuhen 2007-04-30
  • 打赏
  • 举报
回复
重载操作符,hehe
liangtian_81 2007-04-30
  • 打赏
  • 举报
回复
谢谢各位前辈的指点!
飞哥 2007-04-30
  • 打赏
  • 举报
回复
vector里面的T类型一定要重载过 <<
\才行
除非是简单类型
friend ostream& operator<<(ostream& os, const T& t);
wdz609 2007-04-30
  • 打赏
  • 举报
回复
恩,得重载操作符 "<<"
gooderfeng 2007-04-30
  • 打赏
  • 举报
回复
重载相应的
T为你自己定义的类型
ostream& operator<<(ostream& os, T& )
然后直接
copy(vect.begin(),vect.end(),ostream_iterator<T>(cout," "));


必须的。
sinall 2007-04-30
  • 打赏
  • 举报
回复
那显然,你的T不可能是任意的。也就是说,你的T要求必须提供
class T
{
public:
friend ostream& operator<<(ostream& os, T& t);
};
fantasyemperor 2007-04-30
  • 打赏
  • 举报
回复
重载at函数好了
  • 打赏
  • 举报
回复
重载相应的
T为你自己定义的类型
ostream& operator<<(ostream& os, T& )
然后直接
copy(vect.begin(),vect.end(),ostream_iterator<T>(cout," "));
liangtian_81 2007-04-30
  • 打赏
  • 举报
回复
不好意思,少了一个语句:
for (int i=0;i<vect.size();i++){
std::cout<<i<<": "<<vect.at(i)<<" ";
}

65,213

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧