分析下面的题目查阅资料,仿写向量类vector,至少实现:push_back()在表尾插入元素、insert()在向量的某位置插入元素、clear()清空向量中的元素、size()返回向量中元素的个数、empty()判断是否为空、erase()删除元素等功能。不用仿写迭代器。
时间: 2024-02-12 10:09:12 浏览: 68
好的,这是一个关于仿写向量类的问题。向量类通常是一个动态数组,它可以根据需要自动调整大小,这使得向量类在处理动态数据时非常有用。
首先,我们需要定义一个向量类,它应该包含存储元素的数组和向量的大小。我们还需要实现一些操作,如push_back()、insert()、clear()、size()、empty()和erase()等。
下面是一个可能的实现向量类的代码:
```c++
#include <iostream>
using namespace std;
class Vector {
public:
Vector() {
_size = 0;
_capacity = 10;
_data = new int[_capacity];
}
~Vector() {
delete[] _data;
}
void push_back(int value) {
if (_size == _capacity) {
resize(_capacity * 2);
}
_data[_size++] = value;
}
void insert(int index, int value) {
if (index > _size) {
throw out_of_range("Index out of range");
}
if (_size == _capacity) {
resize(_capacity * 2);
}
for (int i = _size; i > index; --i) {
_data[i] = _data[i-1];
}
_data[index] = value;
_size++;
}
void clear() {
_size = 0;
}
int size() const {
return _size;
}
bool empty() const {
return _size == 0;
}
void erase(int index) {
if (index >= _size) {
throw out_of_range("Index out of range");
}
for (int i = index; i < _size-1; ++i) {
_data[i] = _data[i+1];
}
_size--;
}
void print() const {
for (int i = 0; i < _size; ++i) {
cout << _data[i] << " ";
}
cout << endl;
}
private:
void resize(int capacity) {
int *new_data = new int[capacity];
for (int i = 0; i < _size; ++i) {
new_data[i] = _data[i];
}
delete[] _data;
_data = new_data;
_capacity = capacity;
}
int *_data;
int _size;
int _capacity;
};
int main() {
Vector vec;
cout << "push_back 1, 2, 3" << endl;
vec.push_back(1);
vec.push_back(2);
vec.push_back(3);
vec.print();
cout << "insert 1 at index 1" << endl;
vec.insert(1, 1);
vec.print();
cout << "erase element at index 2" << endl;
vec.erase(2);
vec.print();
cout << "clear" << endl;
vec.clear();
vec.print();
cout << "empty? " << (vec.empty() ? "yes" : "no") << endl;
return 0;
}
```
这个实现中,我们定义了一个动态数组,用于存储元素。我们重载了一些操作符,如push_back()、insert()、erase()、clear()、size()和empty()。这些操作允许我们向向量中添加元素,从向量中删除元素,清空向量中的元素,以及确定向量中元素的数量和是否为空。
阅读全文