如何测试自反、对称或传递
How can I test for reflexive, symmetric, or transitive
我必须在代码中使用此结构:
struct Pair
{
int x,y;
friend bool operator==(Pair a, Pair b)
{
return a.x == b.x && a.y == b.y;
}
friend istream& operator>>(istream& is, Pair& a)
{
is >> a.x >> a.y;
return is;
}
friend ostream& operator<<(ostream& os, Pair a)
{
os << '(' << a.x << ',' << a.y << ')';
return os;
}
};
我需要读取一个.txt文件:
5 1 1 2 2 3 3 4 4 5 5
7 1 1 2 2 3 3 4 4 4 7 7 4 7 7
8 1 1 2 4 3 9 4 16 5 25 6 36 7 49 8 64
这个文件有 3 个关系,每个关系都以一个 int 开头,这是该关系中的对数,然后是许多对。然后(如果不是 eof)再次读取另一个 int 和那么多对,依此类推。
如何将此数据读取到我的结构对中?
阅读后,我将不得不测试数据是否是反射性的,等等,但我只是在开始这个项目时遇到了麻烦。
这就是我要写的。
我知道我对它的看法可能有点"高级" - 但至少它应该告诉你所需的代码真的没有那么多。
关于一点解释:
-
使用字符串流 (
istringstream
) 允许您将单行视为流。这不是绝对必要的,但如果输入不是预期的格式,可以防止事情出错。 -
friend
流运算符(特别是operator>>
)将允许您"仅"从流中读取一对,只需:Pair p; stream >> p;
现在,当我在
istream_iterator<Pair>
上调用copy_n
算法时,这就是下面的代码隐式执行的操作(即它以与我刚才展示的完全相同的方式提取Pair
)。
using Pairs = vector<Pair>;
int main()
{
string line;
while (getline(cin, line))
{
istringstream iss(line);
unsigned n;
Pairs pairs;
if (iss >> n)
copy_n(istream_iterator<Pair>(iss), n, back_inserter(pairs));
if (!iss)
return 255;
std::cout << "Read a line with " << n << " pairs (check: " << pairs.size() << ")n";
}
}
在 Coliru 上实时观看,其中包含问题的示例输入,打印:
Read a line with 5 pairs (check: 5)
Read a line with 7 pairs (check: 7)
Read a line with 8 pairs (check: 8)
相关文章:
- 使用C++库在Android项目中修改gradle中的cmake参数,用于插入指令的测试
- 无法编译 rtmidi 测试 cmidiin.cpp 文件, 非法指令
- 尽管测试成功,CppUnit测试核心仍被丢弃.为什么
- 函数何时会在c++中包含stack_Unwind_Resume调用
- 数据成员SFINAE的C++17测试:gcc vs clang
- 如何使用重载的相等(==)运算符向测试用例添加描述
- 为什么二进制搜索在我的测试中不起作用
- 从父数组测试用例构造二叉树失败
- 试图对缓存进行跨步测试,但程序并没有结束
- 有什么好的方法可以让系统调用代理允许在单元测试中进行模拟
- OpenGL在启用深度测试时不会丢弃我的碎片
- Python中的for循环与C++有何不同
- 为测试目标创建具有不同源文件夹的文件
- 在子目录中使用target_sources()命令时用于单元测试(qtest)的项目结构
- VC++本机单元测试,找不到调试符号
- 换位表导致测试失败(但在游戏中运行良好)
- 用于交叉编译和CMake的预处理器宏的单元测试
- 谷歌测试中的期望值存储在哪里
- 使用结构进行反射,对称或及时的测试集
- 如何测试自反、对称或传递