Pushing_back std::vector 中的值,不带辅助变量

Pushing_back value in std::vector without auxiliary variable

本文关键字:变量 back std vector Pushing      更新时间:2023-10-16

我想知道是否可以在不使用另一个变量的情况下将一个变量push_backstd::vector中。很长一段时间以来,我一直在这样做:

std::vector<int> v;
int temp;
std::cin >> temp;
v.push_back(temp);

我想知道是否可以在一行中执行相同的操作:

v.push_back(READING_HERE);

当然,但我怀疑这是否值得麻烦:

std::copy_n(std::istream_iterator<int>(std::cin), 1, std::back_inserter(v));

std::istream_iterator围绕std::cin创建一个包装迭代器,可用于从std::cin读取值。1是元素的数量,然后再次将值插入向量中。

正如@T.C.提到的,您甚至可以使用以下行,它甚至更短:

v.push_back(*std::istream_iterator<int>(std::cin));

我建议使用辅助变量,因为这样,如果读取失败,std::vector的内容更容易控制和保持良好的定义。

但你可以这样做:

std::vector<int> v;
v.emplace_back(); // default construct a new int in the vector
std::cin >> v.back(); // read directly into the element you just created

Lambdas来救援(在Coliru上直播):

v.emplace_back( [&]{ 
auto i = int{}; 
if( std::cin >> i )
return i;
throw std::runtime_error("Bad input value");
}() ); // IIFE (immediately invoked function expression)

是的,称其为"一行"有点作弊,但它确实检查了输入的合理性。比较此常见问题解答。