0

vector例としてカスタム実装を見てみましょう:

template<typename Object>
class myVector {
public:
    explicit myVector(int size = 0) :
        _size{ size },
        _capasity{ size + SPARE_CAPACITY }
    {
        _buff = new Object[_capasity];
        if (_size > 0) {
            for (int i = 0; i < _size; i++) {
                //_buff[i] = 0;
            }
        }
    }

// more code

private:
    Object * _buff = nullptr;
    int _size;
    int _capasity;
};

だから私の質問は、次のようにmyVector初期化する場合に値を初期化する方法です。

int main() {
    myVector<int> v02(5);                   
}

ここでは、5 つintの値が含まれているため、すべてゼロにする必要があります。他のタイプも同様。_buff[i] = 0;特有のものなのでコメントアウトしましたint。ヒントを教えてください。

4

2 に答える 2

3

それは次のように簡単です

for (int i = 0; i < _size; i++)
    _buff[i] = Object{};

または、ループを削除して{}(または()) のペアをここに追加することもできます。

_buff = new Object[_capasity]{};
//                           ^^

ただし、このオプションは、 @bipllで指摘されているように_capasity、最初のオブジェクトではなく、すべてのオブジェクトを値で初期化します。_size


また、 の動作を模倣したい場合はstd::vector、生のストレージ (おそらくstd::aligned_storage) を割り当て、コンストラクター (placement-new を介して) とデストラクタを手動で呼び出す必要があることに注意してください。

Objectがクラス型の場合、最初のオブジェクトではなく、_buff = new Object[_capasity];すべてのオブジェクトに対して既定のコンストラクターを呼び出します。_capasity_sizestd::vector

于 2018-12-29T08:24:56.213 に答える