你可以定义你的custom_array,它是从标准std :: array继承而来的。
template<typename _T, size_t _size>
class custom_array : public std::array<_T, _size> {
public:
custom_array(std::array<_T, _size> arr,
size_t start,
size_t end) {
size_t itr = 0;
while (itr < this->size() &&
start < arr.size() &&
start <= end) {
this->_Elems[itr++] = arr[start++];
}
}
custom_array(std::array<_T, _size>::iterator start,
std::array<_T, _size>::iterator end) {
size_t itr = 0;
while (itr < this->size()) {
this->_Elems[itr++] = *start;
start++;
if (start == end) { break; }
}
}
};
然后你就可以宣布你custom_array如你所愿,例如:
std::array<int, 4> arr = { 1, 2, 3, 4 };
custom_array<int, 4> arr_1(a, 0, 4);
custom_array<int, 4> arr_2(a.begin(), a.end());
看看一些基本参考材料,就会发现,在构造函数是隐式声明,并且必须遵循集合初始化规则。由于这不包括迭代器,答案是否定的。请记住,'std :: array'代表一个固定/静态数组,就像传统的C风格数组一样。 –
你打算使用C++ 17吗? http://en.cppreference.com/w/cpp/container/array/begin – Rama
既然你知道数组的大小,你可以计算'* std :: begin(myarray)','* std :: next( std :: begin(myarray))'等,并用通常的聚合语法'std :: array myarray2 {a,b,c,d};构建myarray2。 –