重载运算符>>并向字符串添加数字
Overloading >> operator and adding a number to a string
im在获取向字符串添加数字的函数时遇到问题。这些数字来自矩阵,是整数。我试图将它们解析为格式为{{a,b,c},{d,e,f},{g,h,i}}的字符串。已经实现了代码,但当我运行它时,数字应该在哪里,它是空白的,我不知道为什么。
我的功能:
istream& operator>>(istream& in, Matrix& m) {
vector<int> vec;
vec = m.getRow(0);
string matrix = "{";
in >> matrix;
for (int i = 0; i < vec.size(); i++){
vector<int> vecRow = m.getRow(i);
matrix+= " {";
for (int j = 0; j < vec.size(); j++){
if(j >=vec.size()-1){
matrix += vecRow[j];
}else{
matrix += vecRow[j] + ", " ;
}
}
vecRow.clear();
matrix+= "}";
vecRow = m.getRow(i);
}
matrix+= " }";
cout<< matrix<<endl;
return in;
}
好的,所以我修改了它,现在我没有错误,但当我在测试仪(cin>>矩阵)中调用这个函数时,它冻结了,之后什么也没发生。
重载提取运算符>>
时,需要使用传入的参数(std::istream& in, ...)
从流中获取数据,而不是全局std::cin
流。
有点像这样让你开始:
#include<iostream>
struct Matrix {};
std::istream& operator>>(std::istream& is, Matrix& m)
{
// input format: {{a,b,c},{d,e,f},{g,h,i}}
char c;
// we expect the first char to be '{'
if(is.get(c) != '{')
is.setstate(std::ios::failbit); // signal error
else
{
// now process the middle part:
// {a,b,c},{d,e,f},{g,h,i}
// ...
// then check the end brace '}'
if(is.get(c) != '}')
is.setstate(std::ios::failbit); // signal error
}
return is;
}
但事实证明,您正在做相反的事情——向输出写入Matrix
在这种情况下,您需要使用插入运算符<<
,并将const
引用传递给Matrix
。
写入(std::ostream& os, ...)
参数,如下所示:
std::ostream& operator<<(std::ostream& os, const Matrix& m)
{
// output format: {{a,b,c},{d,e,f},{g,h,i}}
os << '{'; // initial brace
// loop on each row
for(unsigned row = 0; row < m.getSize(); ++row)
{
const std::vector<int>& vecRow = m.getRow(row);
// output one row {a,b,c} item here
os << '{'; // open row brace
// loop on each item
for(unsigned i = 0; i < vecRow.size(); ++i)
{
// ,,,
}
os << '}'; // close the row
}
os << '}'; // close the Matrix
return os;
}
现在,当您执行std::cout << m;
时,将调用您的函数,并且参数(std::ostream& os, ...)
将引用std::cout
。
相关文章:
- 将成员变量添加到共享库中的类中,不会破坏二进制兼容性吗
- 如何在C++中从两个单独的for循环中添加两个数组
- POCO::PostgreSQL:如何将std::vector支持添加到`Binder::bind`
- 如何仅为一个函数添加延迟
- 如何防止 c++ 在从浮点型转换为双精度型(不适用于 IO)时添加额外的小数?
- 使用std::transform将一个范围的元素添加到另一个范围中
- 如何将更多文件夹添加到c++include路径
- 如何将元素添加到数组的线程安全函数?
- QT通过C++添加映射QML项目
- 如何将点击的信号和插槽添加到qt中的自定义按钮中
- 如何使用重载的相等(==)运算符向测试用例添加描述
- 为什么Mat类的两个对象可以在不重载运算符+的情况下添加
- 如何防止clang格式在流运算符调用之间添加换行符<<
- 只能向C++添加一定数量的字符
- Qt和C++:将QLineEdit添加到QTabWidget中
- 将QIcon添加到QTableView单元格
- 为什么我必须在C++中添加一个赋值符号来声明一个数组
- 为什么除非添加括号,否则构造函数上的模板替换会失败?
- EASTL矢量<向量<int>>连续的
- 将图像添加到资源文件夹UWP C++