c++ 什么阻止了vector< >的子类化,并在必要时让at()或operator[]调整数组的大小?

mzsu5hc0  于 2023-08-09  发布在  其他
关注(0)|答案(1)|浏览(78)

什么可以防止vector<>的子类化,并在必要时覆盖at()operator[]来调整数组的大小?具体来说,我希望代码像这样工作:

MYvector<int> v;
v[3] = 1;

字符串
将等同于:

vector<int> v;
if ( v.size() <= 3 )
    v.resize( 3 + 1 );
v[3] = 1;


我在很多年前研究过这个问题,得出的结论是vector<>根本就不是为子类化而设计的,但现在我不记得最大的障碍是什么了。
要明确的是,如果基本上是一个新的虚拟方法要写,我会这样做,但如果我需要做几十个其他定义(朋友函数?迭代器?)。
方言可能是C17或C20,尽管讨论更早或更晚的方言或供应商方言也很有兴趣。

wvmv3b1j

wvmv3b1j1#

可以使用如下的类定义:

template <class T>
class MYvector : public vector<T>
{
public:
    T& operator[](size_t i) {if (vector<T>::size() < i+1) vector<T>::resize(i+1); return vector<T>::operator[](i);}
    T& at(size_t i) {if (vector<T>::size() < i+1) vector<T>::resize(i+1); return vector<T>::at(i);}
};

字符串
但是,显式地调整向量的大小可能比调用operator[]更好。自动调整大小可以屏蔽错误,而且新元素(自动调整大小后)由默认构造函数进行值初始化(但不是由用户显式初始化)

相关问题