从没有临时变量的 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
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