c ++运算符<<重载不打印出向量
c++ operator<< overloading not printing out vector
我无法打印自己的矢量 class、vector<Data> data;
。
简而言之,我正在研究 class 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);
但是您可能已经怀疑,这只会打印出第一个 "pair",而从文件中读取的其余数据将被丢弃。我做错了什么?为什么 while
-loop 没有继续从文件中读取?任何帮助表示赞赏!如果您需要有关 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
都将报告为失败,并且不会将任何项目放入向量中。
我无法打印自己的矢量 class、vector<Data> data;
。
简而言之,我正在研究 class 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);
但是您可能已经怀疑,这只会打印出第一个 "pair",而从文件中读取的其余数据将被丢弃。我做错了什么?为什么 while
-loop 没有继续从文件中读取?任何帮助表示赞赏!如果您需要有关 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
都将报告为失败,并且不会将任何项目放入向量中。