从没有临时变量的 ifstream 中提取?

Extract from an ifstream without a temporary variable?

ifstream 提供 operator>> 的重载以从流的下一行中提取值。但是,我发现自己经常这样做:

int index;
input >> index;
arr[index] = <something>;

有没有什么方法可以将这些数据放入 [index] 而不必创建这个临时变量?

您可以编写一个函数来从 istream:

中提取下一个值
template <typename T> // T must be DefaultConstructible
T read(std::istream& input) {
    T result;
    input >> result;
    return result;
}

那么,你可以这样写:

arr[read<int>(input)] = <something>;

虽然你可能应该写

arr.at(read<int>(input)) = <something>;

因为否则您会面临 buffer-overflow 漏洞。如果输入文件有一个超出范围的整数,你就会写出越界。

当然,您可以通过构造一个临时 istream_iterator 来做到这一点,例如:

arr[*istream_iterator<int>(input)] = something