Добавление нескольких значений в вектор
у меня есть вектор ints, который я хочу добавить несколько значений, но слишком много значений, чтобы добавить, используя много push_backs
. Есть ли способ добавления нескольких значений в конце вектора. Что-то вроде этого:--5-->
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 ответов
вы можете просто сделать оператор:
template <class T>
std::vector<T>& operator+=(std::vector<T>& lhs, std::initializer_list<T> l)
{
lhs.insert(std::end(lhs), l);
return lhs;
}
чтобы представить как можно больше решений, это тоже должно работать:
for(const auto x : {11, 12, 13, 14})
v.push_back(x);
демо.
вы можете имитировать толчок 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
вы можете сделать это с помощью функции-члена insert, как таковой:
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, которые можно найти здесь и фрагмент кода, который я написал, практически следует этому формату:
vectorName.insert (положение для начала ввода значений, первое значение для ввода, сколько значений enter)
Примечание: последние два аргумента (т. е. myarr, myarr+8) используют арифметику указателей. myarr-это адрес в памяти первого элемента массива, а второе значение-адрес 8-го элемента. Вы можете прочитать об арифметике указателя здесь.
надеюсь, что это поможет!