implementation of Vector (using C++)

本文介绍了一个简单的 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.
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值