Ostream nie wyświetla ostatniego elementu wektora.

0

Cześć.

Wywołanie cout << cV2 << endl; nie pokazuje ostaniego elementu wektora cv2.vec Sprawdzałem i ostatni element 8 tam jest i wektor ma wielkość 4. Nie Wiecie dlaczego tak jest ?

using namespace std;

template<typename T>
class MyVector{
public:
    MyVector(const initializer_list<T>& c ): vec{c} {}
    MyVector(T* begin, T* end){
       for(T* i = begin; i <= end; i++) {
        vec.push_back(*i);
       }
    }
    T* begin(){
        return &vec[0];
    }
    T* end() {
        int n = vec.size();
        return &vec[n - 1];
    }
    vector<T>& get_vector(){
        return vec;
    }
private:
vector<T> vec{};
};

template<typename T>
ostream& operator<<(ostream& os, MyVector<T>& my) {
    for(auto& e : my)
        os << e << endl;
    return os;
}

int main() {
   MyVector<int> cV = {7,5,16,8};
   MyVector<int> cV2(cV.begin(), cV.end());
   cout << cV2 << endl;
}
1
T* end() {
        int n = vec.size();
        return &vec[n];
    }
2
CloudPro napisał(a):
T* end() {
        int n = vec.size();
        return &vec[n];
    }

Jest jeszcze jeden błąd, który koreluje z tym wskazanym:

    MyVector(T* begin, T* end)
    {
        for (T* i = begin; i < end; i++) {
            vec.push_back(*i);
        }
    }

https://godbolt.org/z/jrqPxnKM9

Równocześnie ja wolę taką poprawkę:

    MyVector(T* begin, T* end)
    {
        vec = {begin, end};
    }

https://godbolt.org/z/bqsf778hY

1 użytkowników online, w tym zalogowanych: 0, gości: 1