没有辅助变量的std :: vector中的Pushing_back值

时间:2017-06-26 17:09:36

标签: c++ c++11

我想知道在不使用其他变量的情况下是否可以push_back变量std::vector变为std::vector<int> v; int temp; std::cin >> temp; v.push_back(temp); 。很长一段时间我一直这样做:

v.push_back(READING_HERE);

我想知道是否有可能在一行中做同样的事情:

{{1}}

3 个答案:

答案 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