Конкатенация итератора C ++ входит в константную векторную переменную-член во время построения
У меня есть класс X, который я предоставляю здесь:
class X {
public:
template <typename Iter>
X(Iter begin, Iter end) : mVec(begin, end) {}
private:
vector<Y> const mVec;
};
Теперь я хочу добавить в этот класс новый конкатенационный конструктор, например:
template <typename Iter1, typename Iter2>
X(Iter1 begin1, Iter1 end1, Iter2 begin2, Iter2 end2) : mVec(???) { ??? }
Такой конструктор объединяет два диапазона [begin1, end1) и [begin2, end2) в mVec. Проблемы
1) Я хотел бы сохранить const на mVec, чтобы он считался постоянным во всех других методах X.
2) Я хотел бы избежать ненужных копий, если это вообще возможно. То есть одно решение состоит в том, чтобы иметь статический метод, который создает неконстантную временную переменную для диапазона 1, вставляет диапазон 2 и возвращает его, а затем определяет конструктор объединения для
template <typename Iter1, typename Iter2>
X(Iter1 begin1, Iter1 end1, Iter2 begin2, Iter2 end2)
: mVec(concatenate(begin1, end1, begin2, end2)) { }
но я считаю, что это копирует все значения, по крайней мере, в одно дополнительное время.