我想知道在不使用其他变量的情况下是否可以push_back
变量std::vector
变为std::vector<int> v;
int temp;
std::cin >> temp;
v.push_back(temp);
。很长一段时间我一直这样做:
v.push_back(READING_HERE);
我想知道是否有可能在一行中做同样的事情:
{{1}}
答案 0 :(得分:7)
当然,但我怀疑这是值得的:
struct lconv* localeconv(void) __INTRODUCED_IN(21) __VERSIONER_NO_GUARD;
#if __ANDROID_API__ >= 21
locale_t duplocale(locale_t) __INTRODUCED_IN(21);
void freelocale(locale_t) __INTRODUCED_IN(21);
locale_t newlocale(int, const char*, locale_t) __INTRODUCED_IN(21);
#endif /* __ANDROID_API__ >= 21 */
char* setlocale(int, const char*);
#if __ANDROID_API__ >= 21
locale_t uselocale(locale_t) __INTRODUCED_IN(21);
#endif /* __ANDROID_API__ >= 21 */
#define LC_GLOBAL_LOCALE __BIONIC_CAST(reinterpret_cast, locale_t, -1L)
__END_DECLS
#endif /* _LOCALE_H_ */
std::copy_n(std::istream_iterator<int>(std::cin), 1, std::back_inserter(v));
在std::istream_iterator
周围创建一个包装器迭代器,可用于从std::cin
读取值。 std::cin
是元素的数量,然后它再次将值插入向量。
mentioned作为@T.C.,你甚至可以使用以下一行,甚至更短:
1
答案 1 :(得分:2)
我建议使用辅助变量,因为如果读取失败,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
答案 2 :(得分:2)
Lambdas救援(见 live on 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)
是的,它有点作弊来称呼这个&#34;一行&#34;,但确实检查输入是否合理。比较this FAQ。