向矢量添加多个值

时间:2014-11-11 18:35:45

标签: c++ vector addition

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

std::vector<int> values
values += {3, 9, 2, 5, 8, etc};

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

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

using namespace boost::assign;

{
    std::vector<int> myElements;
    myElements += 1,2,3,4,5;
}

这似乎是这样声明的:

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 );
}

是否有任何C ++ / C ++ 11方法可以执行此操作,如果没有,将如何实现?

6 个答案:

答案 0 :(得分:24)

这应该有效:

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

答案 1 :(得分:5)

也许是insert

values.insert( values.end(),  {3, 9, 2, 5, 8, etc} );

Demo

答案 2 :(得分:4)

为了提供尽可能多的解决方案,这也应该有效:

for(const auto x : {11, 12, 13, 14})
    v.push_back(x);

Demo

答案 3 :(得分: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;
}

答案 4 :(得分:3)

您可以模仿提升boost::assign行为

template <typename T> 
class vector_adder 
{
public:
    std::vector<T>& v;
    vector_adder(std::vector<T>& v):v(v)
    {  }

    vector_adder& operator,(const T& val)
    {  
       v.push_back(val);
       return *this;
    }
};

template <typename T> 
vector_adder<T> operator+=(std::vector<T>& v,const T& x)
{
    return vector_adder<T>(v),x;
}

然后,

 std::vector<int> v {1,2,3,4};
 v += 11,12,13,14 ;

请参阅here

答案 5 :(得分:1)

您可以使用insert member函数来执行此操作:

vector<int> v; 
int myarr[] {1, 2, 4, 5, 5, 6, 6, 8}; //brace initialization with c++11

v.insert(v.end(), myarr, myarr+8);

之前的答案省略了insert参数中的中间参数,但是那个不起作用。 insert方法有几种格式,可以找到here,我写的代码片段实际上遵循以下格式:

vectorName.insert(开始输入值的位置,要输入的第一个值,要输入的值)

注意:最后两个参数(即myarr,myarr + 8)使用指针算术。 myarr是数组中第一个元素的内存地址,第二个值是第8个元素的地址。您可以阅读指针算术here

希望有所帮助!