我正在使用来自 this answer 的代码从文件中读取数字行(每行一个数字)到 vector 中:
ifstream fs(file_name);
vector<double> v {istream_iterator<double>{fs}, istream_iterator<double>{}};
fs.close();
它工作得很好。我的问题是:
- 它是如何工作的? @user470379 通过将其扩展为
while
循环发布了一段“等效”代码。我理解这个循环,但我不明白其中的等价性。 - 人们为什么批评?除了我在这里不关心的定界符或引号问题外,@StudentT 和@XanderTulip 等一些人表示它非常低效。因为我不知道它是如何工作的,所以我无法得到低效的部分。但我也不认为分隔符问题会导致性能问题,如@StudentT 所述(“...因此不可扩展...”)。
谢谢。
最佳答案
How does it work?
它通过从一系列从流中读取的迭代器进行复制来初始化 vector 。给定流的初始迭代器每次递增时都会从流中读取一个double
。当它到达末尾时,它比较等于用于标记范围末尾的默认构造的迭代器。
Why were people criticizing?
该答案中的代码用于拆分字符串,因此效率很低 - 有一些方法可以查看子字符串而无需首先复制它,然后分配大量小字符串。您的代码非常不同 - 从文件中读取一组数字 - 并且是一种相当有效的方法。
关于c++ - 一种有争议的从文件中读取行到 vector 的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30191639/