implementation of Vector (using C++)

C++ Vector 实现
本文介绍了一个简单的 C++ Vector 类实现。该 Vector 类支持动态数组的功能,并具备拷贝构造、赋值运算符重载等特性。文章详细展示了如何通过模板实现 Vector 类,包括内存分配、释放、扩容以及迭代器的支持。

  The Vector will be a first-class type,meaning that unlike the primitive array in C++,the Vector can be cpoied,and the memory it uses can be automatically reclaimed(via its destructor).

  First,recall some important fetures of C++ primitive arrays:

    (1):The array is simply a pointer variable to a block of memory;the autual array size must be

maintained separately by the programmer.

    (2):The block of memory can be allocated via new[],but then must be free via delete[].

    (3):The block of memory can not be resize

 

  Now,outline the main details of Vector:

well,go to read the source code,it's very simple ^_^

 

Sure! Here's a possible implementation of a vector class template that meets your requirements: ```c++ template<typename T> class Vector { public: Vector() : size_(0), capacity_(0), data_(nullptr) {} Vector(const Vector& other) : size_(other.size_), capacity_(other.capacity_), data_(new T[capacity_]) { for (size_t i = 0; i < size_; ++i) { data_[i] = other.data_[i]; } } Vector& operator=(const Vector& other) { if (this != &other) { size_ = other.size_; capacity_ = other.capacity_; delete[] data_; data_ = new T[capacity_]; for (size_t i = 0; i < size_; ++i) { data_[i] = other.data_[i]; } } return *this; } ~Vector() { delete[] data_; } T& operator[](size_t i) { if (i >= size_) { throw std::out_of_range("Index out of range"); } return data_[i]; } const T& operator[](size_t i) const { if (i >= size_) { throw std::out_of_range("Index out of range"); } return data_[i]; } void add(const T& value) { if (size_ == capacity_) { if (capacity_ == 0) { capacity_ = 1; } else { capacity_ *= 2; } T* new_data = new T[capacity_]; for (size_t i = 0; i < size_; ++i) { new_data[i] = data_[i]; } delete[] data_; data_ = new_data; } data_[size_] = value; ++size_; } private: size_t size_; size_t capacity_; T* data_; }; ``` Explanation: - The `Vector` class template is parameterized by the type `T` of the elements it stores. - The class has a default constructor that initializes the size, capacity, and data pointer to null, and a copy constructor that creates a new vector with the same size, capacity, and elements as another vector. - The assignment operator is implemented using the copy-and-swap idiom to ensure strong exception safety. - The destructor deallocates the memory used by the data pointer. - The `operator[]` method is used to access elements by index. It checks if the index is within bounds and throws an `std::out_of_range` exception if not. - The `add` method adds a new element to the end of the vector. If the vector is full, it doubles the capacity and allocates a new array with the new capacity, copies the existing elements, and replaces the old array with the new one.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值