向矢量添加多个值

Eej*_*jin 13 c++ vector addition

我有一个int的向量,我想要添加多个值,但是太多的值要添加很多push_backs.是否有任何方法可以在向量的末尾添加多个值.有点像这样:

std::vector<int> values
values += {3, 9, 2, 5, 8, etc};
Run Code Online (Sandbox Code Playgroud)

我发现boost有类似的东西,但我不想包含boost.

#include <boost/assign/std/vector.hpp>

using namespace boost::assign;

{
    std::vector<int> myElements;
    myElements += 1,2,3,4,5;
}
Run Code Online (Sandbox Code Playgroud)

这似乎是这样声明的:

template <class V, class A, class V2>
inline list_inserter<assign_detail::call_push_back<std::vector<V,A> >, V> 
operator+=( std::vector<V, A>& c, V2 v )
{
    return push_back( c )( v );
}
Run Code Online (Sandbox Code Playgroud)

是否有任何C++/C++ 11方法可以做到这一点,如果没有,它将如何实现?

Sla*_*ica 25

这应该工作:

std::vector<int> values;
values.insert( values.end(), { 1, 2, 3, 4 } );
Run Code Online (Sandbox Code Playgroud)


Col*_*mbo 5

也许有插入:

values.insert( values.end(),  {3, 9, 2, 5, 8, etc} );
Run Code Online (Sandbox Code Playgroud)

演示.


0x4*_*2D2 3

你可以只创建一个运算符:

template <class T>
std::vector<T>& operator+=(std::vector<T>& lhs, std::initializer_list<T> l)
{
    lhs.insert(std::end(lhs), l);
    return lhs;
}
Run Code Online (Sandbox Code Playgroud)

  • 有一个恼人的问题,我从来没有真正找到一个好的解决方案;如果你把这个函数放在全局命名空间中,然后尝试在定义了完全不同的“operator+=”的命名空间中使用它,那么这个函数就会被隐藏。要解决此问题,您必须在声明另一个“operator+=”的任何命名空间中执行“using ::operator+=”。ADL 找不到这个,因为它只会检查“namespace std”(我们不能将其放入“namespace std”,因为用户代码无法执行此操作)。 (3认同)
  • @0x499602D2:现在还不算太晚! (2认同)