複数の値を追加したいintのベクトルがありますが、多くのPush_backs
を使用して追加するには値が多すぎます。ベクトルの最後に複数の値を追加する方法はありますか?これに沿った何か:
std::vector<int> values
values += {3, 9, 2, 5, 8, etc};
ブーストにはこのようなものがあることがわかりましたが、ブーストを含める必要はありません。
#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の方法はありますか、そうでない場合はどのように実装されますか?
あなたはただ演算子を作ることができます:
template <class T>
std::vector<T>& operator+=(std::vector<T>& lhs, std::initializer_list<T> l)
{
lhs.insert(std::end(lhs), l);
return lhs;
}
これは機能するはずです:
std::vector<int> values;
values.insert( values.end(), { 1, 2, 3, 4 } );
ブーストを模倣することができます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
を参照してください
これは、メンバーの挿入関数を使用して行うことができます。
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);
挿入パラメーターの中央の引数を省略した以前の回答がありましたが、それは機能しません。挿入メソッドには従うべきいくつかの形式があり、それらは見つけることができます ここ そして私が書いたコードスニペットは実際にはこの形式に従います:
vectorName.insert(値の入力を開始する位置、最初に入力する値、入力する値の数)
注:最後の2つの引数(つまり、myarr、myarr + 8)はポインター演算を使用することに注意してください。 myarrは、配列の最初の要素のメモリ内のアドレスであり、2番目の値は8番目の要素のアドレスです。ポインタ演算について読むことができます ここ 。
お役に立てば幸いです。