Конкатенация итератора 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)) { }

но я считаю, что это копирует все значения, по крайней мере, в одно дополнительное время.

Ответы на вопрос(5)

Ваш ответ на вопрос