LeetCode 297. Serialize and Deserialize Binary Tree
实现一
1 | class Codec { |
deserialize 实现二
1 | TreeNode* deserialize(istringstream& in) { |
注1:
1 | int val; |
如果我们输入Boo, 上面的读操作就会失败。代码中的输入运算符期待读取一个int, 但却得到了一个字符B。这样,cin 会进入错误状态(类似的,如果输入一个eof,cin也会进入错误状态)。一个流一旦发生错误,其上后续的IO操作都会失败。只有当一个流处于无错状态时,我们才可以从它读取数据,向它写入数据。由于流可能处于错误状态,因此代码通常应该在使用一个流之前检查它是否处于良好状态。
确定一个流对象的状态的最简单的方法是将它当作一个条件来使用 :
1 | while (cin >> n) // while 循环检查 >> 表达式返回的流的状态。如果输入操作成功,流保持有效状态, 则条件为真 |
上述deserialize代码还可改为:
1 |
|
总之就是记住 流一旦发生错误,其后续IO操作都会失败,所以下次IO操作前要先用clear()清空(或者叫复位)条件状态标志位。
stoi()
将string 转化为int 所谓stoi 是不是 string to int …
虽然在上面哪个题里 stringstream 也可以进行数据类型转换, 但是 从输入流里往 int类型对象里读入(存入)数据 遇到 # 就会中断。