C++运算符<<重载不打印出向量
c++ operator<< overloading not printing out vector
我无法打印出我自己的类的向量,vector<Data> data;
.
简而言之,我正在研究一个类class Data_proc
,它在 public 下有一个构造函数:
explicit Data_proc(const string& n, istream& is)
{
Data temp;
while(is >> temp)
this->data.push_back(temp);
}
我还超载了用于打印的operator<<
:
friend ostream& operator<<(ostream& os, const Data_proc& dp)
{
os << "Person: " << dp.name
<< "nnumber: " << dp.number;
copy(dp.data.begin(), dp.data.end(), ostream_iterator<Data>(cout));
return os;
}
这里的问题是代码编译没有问题,但数据向量中的任何内容都没有打印到控制台。但是,当我按如下方式更改构造函数时,它部分有效:
Data temp;
is >> temp;
data.push_back(temp);
但正如您可能已经怀疑的那样,这只会打印出第一个"对",从文件中读取的其余数据将被丢弃。我做错了什么?为什么while
循环没有继续从文件中读取?任何帮助不胜感激!如果您需要有关class Data
的详细信息,请告诉我!
编辑:operator>>
数据,我有string staffName
和vector<int> passCode
:
friend istream& operator>>(istream& is, Data& d)
{
getline(is, d.staffName, 'n');
int temp;
while(is >> temp)
d.passCode.push_back(temp);
return is;
}
如果需要,我可以粘贴输入文件内容的外观片段!
编辑2:为class Data
添加了operator<<
:
friend ostream& operator<<(ostream& os, const Data& d)
{
os << d.staffName<< "n";
copy(d.passCode.begin(), d.passCode.end(), ostream_iterator<int>(cout, " "));
return os;
}
编辑3:做了一个新的operator>>
:
getline(is, d.staffName, 'n');
string results;
getline(is, results, 'n');
istringstream iss(results);
int val;
while(iss >> val)
d.passCode.push_back(val);
return is;
在你的operator>>
while(is >> temp)
d.passCode.push_back(temp);
这会从流中读取整数,直到失败。因此,无论它运行到流的末尾,还是直到它尝试读取无法解释为 int 的内容,当函数结束时,流都保证处于失败状态。这意味着在构造函数中,无论文件的内容如何,表达式is >> temp
都会报告为 failed,并且不会在向量中放入任何项。
相关文章:
- 写入向量<向量<bool>>
- 函数向量_指针有不同的原型,我可以构建一个吗
- std::向量与传递值的动态数组
- 将值指定给向量(2D)的向量中的某个位置
- 找不到成员对象:没有名为get_event()的成员,也处理多态性和向量
- 如何使用向量的template_back函数
- 尝试通过多个向量访问变量时,向量下标超出范围
- 如何通过派生类函数更改基类中的向量
- 请解释这句话(cout<<1+int((a<b)^((b-a)&1) )<<endl
- C++从另一个类访问公共静态向量的正确方法是什么
- 如何将ampl中的集合表示为c++中的向量
- 变量没有改变?通过向量的函数调用
- 迭代时从向量和内存中删除对象
- 向量 <int> a {N, 0} 和 int arr a[N] = {0} 的时间复杂度有什么区别
- 如何为模板化对象创建模板向量?VS正在投掷C3203
- 呼叫运营商<<临时
- 为什么将此对向量&lt; map&lt; int,int&gt;&gt;中的地图进行更新.失败
- 如何加入向量&lt; int&gt;到C 中的单个INT
- (C 14)操作员&lt;&lt;超负荷无法正如智能指针向量所预期的那样工作
- 如何过载<<用于YAML::Emitter的运算符,以序列化包含另一个自定义类的向量的自定义类