我有一个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方法可以执行此操作,如果没有,将如何实现?
答案 0 :(得分:24)
这应该有效:
std::vector<int> values;
values.insert( values.end(), { 1, 2, 3, 4 } );
答案 1 :(得分:5)
答案 2 :(得分:4)
答案 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。
希望有所帮助!