Векторная реализация C ++ - PullRequest
       2

Векторная реализация C ++

0 голосов
/ 21 февраля 2019

Я пытаюсь сделать простую реализацию вектора c ++, и она работает с простым typename (или class, то же самое), но с typename * (double * или Test *) у меня ошибка, почему?Я попытался изменить нотацию на -> и это должно работать нормально, но это не так!Что я неправильно понял?Я пытаюсь отладить VS2017, но не вижу, что не так, оператор [] возвращает * Test и я использую -> to element.

Source.cpp

#include <iostream>
#include "Vector.h" 
using namespace std;
class Test
{
    public:
    double a = 1;
    Test(){}
};
int main()
{
    Vector<Test*> Vec2(10);
    {
        for (int i = 0; i < 10; i++)
        Vec2[i]->a = i;
    }
    for (int i = 0; i < 10; i++)
    cout << "Vec2[" << i << "] = " << Vec2[i]->a << endl;
    return 0;
}

Vector.h

#include <cstdlib>
#include <cassert>
template <typename T>
class Vector
{
public:
    T *arr = nullptr;
    size_t _size = 0;
    size_t _capacity = 4;
    Vector() {
        arr = new T[_capacity];
    }
    Vector(size_t size) {
        _capacity = size << 2;
        arr = new T[_capacity];
        _size = size;
    }
    ~Vector() {
        delete[] arr;
    }
    size_t size() {
        return _size;
    }
    size_t capacity() {
        return _capacity;
    }
    void clear() {
        _size = 0;
    }
    T& operator[](size_t idx) { return arr[idx]; }
    const T& operator[](size_t idx) const { return arr[idx]; }
    void reallocate()
    {
        T *arr_n = new T[_capacity];
        for (int i = 0; i < _size; i++)
            arr_n[i] = arr[i];
        delete[] arr;
        arr = arr_n;
    }
    Vector& operator=(const Vector& B) {
        reallocate(B.capacity());
        _size = B.size();
        for (size_t j = 0; j < _size; ++j) {
            arr[j] = B->arr[j];
        }
        return *this;
    }
    void push_back(T input)
    {
        if (_size == _capacity) {
            _capacity <<= 2;
            reallocate();
        }
        arr[_size] = input;
        ++_size;
    }
};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...