基于vs2019,仿写向量类vector,至少实现:push_back()在表尾插入元素、insert()在向量的某位置插入元素、clear()清空向量中的元素、size()返回向量中元素的个数、empty()判断是否为空、erase()删除元素等功能。不用仿写迭代器。
时间: 2024-05-01 08:19:38 浏览: 46
好的,这是一个关于仿写向量类vector的问题。我可以帮您回答这个问题。
首先,我们需要定义一个模板类Vector,其中包含以下成员函数:
1. push_back(value):在表尾插入元素value。
2. insert(pos, value):在向量的位置pos插入元素value。
3. clear():清空向量中的元素。
4. size():返回向量中元素的个数。
5. empty():判断向量是否为空。
6. erase(pos):删除向量中位置为pos的元素。
下面是基于vs2019仿写向量类vector的代码实现:
```
template<typename T>
class Vector {
private:
T* data; // 存储数据的数组
size_t capacity; // 数组容量
size_t len; // 数组实际长度
public:
Vector() : capacity(10), len(0) { data = new T[capacity]; } // 构造函数
~Vector() { delete[] data; } // 析构函数
// 在表尾插入元素
void push_back(T value) {
if (len >= capacity) { // 如果数组容量不足
capacity *= 2; // 容量扩大为原来的两倍
T* new_data = new T[capacity]; // 新建数组
for (size_t i = 0; i < len; ++i)
new_data[i] = data[i]; // 拷贝元素到新数组中
delete[] data; // 释放旧数组的空间
data = new_data; // 将新数组指针赋值给data
}
data[len++] = value; // 在表尾插入元素
}
// 在向量的某位置插入元素
void insert(size_t pos, T value) {
if (pos > len) throw std::out_of_range("insert: index out of range"); // 如果pos大于当前元素数,则抛出out_of_range异常
if (len >= capacity) { // 如果数组容量不足
capacity *= 2; // 容量扩大为原来的两倍
T* new_data = new T[capacity]; // 新建数组
for (size_t i = 0; i < len; ++i)
new_data[i] = data[i]; // 拷贝元素到新数组中
delete[] data; // 释放旧数组的空间
data = new_data; // 将新数组指针赋值给data
}
for (size_t i = len; i > pos; --i)
data[i] = data[i - 1]; // 从pos位置开始的元素向后移动一个位置
data[pos] = value; // 在pos位置插入元素
++len; // 元素个数加1
}
// 清空向量中的元素
void clear() {
len = 0; // 将元素个数设为0,即清空向量
}
// 返回向量中元素的个数
size_t size() {
return len; // 返回元素个数
}
// 判断是否为空
bool empty() {
return len == 0; // 如果元素个数为0,则向量为空
}
// 删除元素
void erase(size_t pos) {
if (pos >= len) throw std::out_of_range("erase: index out of range"); // 如果pos大于当前元素数,则抛出out_of_range异常
for (size_t i = pos; i < len - 1; ++i)
data[i] = data[i + 1]; // 将pos位置之后的元素向前移动一个位置
--len; // 元素个数减1
}
};
```
这样,我们就完成了仿写向量类vector的代码实现。您可以在自己的项目中使用这个类来管理向量的操作。
阅读全文