相关疑难解决方法(0)

在构造时将C++迭代器的范围连接成const向量成员变量

我有一个X类,我在这里提供了一个片段:

class X {
  public:
    template <typename Iter>
    X(Iter begin, Iter end) : mVec(begin, end) {}

  private:
    vector<Y> const mVec;
};
Run Code Online (Sandbox Code Playgroud)

我现在想为这个类添加一个新的连接构造函数,如:

template <typename Iter1, typename Iter2>
X(Iter1 begin1, Iter1 end1, Iter2 begin2, Iter2 end2) : mVec(???) { ??? }
Run Code Online (Sandbox Code Playgroud)

这样的构造函数会将两个范围[begin1,end1]和[begin2,end2]连接到mVec中.挑战是

1)我想在mVec上保留const,因此在X的其他方法中它被认为是常量.

2)如果可能的话,我想避免不必要的副本.也就是说,一种解决方案是使用静态方法将非const临时构造到范围1,插入范围2并返回它,然后将连接构造函数定义为

template <typename Iter1, typename Iter2>
X(Iter1 begin1, Iter1 end1, Iter2 begin2, Iter2 end2) 
  : mVec(concatenate(begin1, end1, begin2, end2)) { }
Run Code Online (Sandbox Code Playgroud)

但我认为,这至少会复制一次所有的价值.

c++ constructor iterator stl concatenation

7
推荐指数
1
解决办法
3274
查看次数

标签 统计

c++ ×1

concatenation ×1

constructor ×1

iterator ×1

stl ×1