请设计实现一个容器类模板CXMUVector,该类模板包含: 容量(capacity), 元素个数(size)和指向数据存储位置的指针(T* pdata,其中T为模板参数)。向量的数据存储在动态分配的数组中,通过pdata指向该数组,每个数组元素为T类型。CXMUVector还包含函数成员: (1)构造函数XMUVector(int c = 100)和析构函数,完成,完成存储空间的分配和回收。 (2)拷贝构造函数,完成深度复制; (3)重载运算符[],实现对容器中元素的随机访问; (4)重载运算符号=,实现容器对象的深度赋值; (5)设计PushBack函数,在向量末尾插入元素,存储空间不足时可自动翻倍增长; (6)设计PopBack函数,弹出向量末尾的元素作为函数的返回值,当向量为空是执行此操作,抛出字符串异常“Pop On Empty Vector!”。 (7)在主函数函数中编程测试代码,实现异常信息的捕捉。 请按要求完成CXMUVector类模板的设计。
时间: 2024-04-13 21:28:25 浏览: 13
```cpp
#include <iostream>
#include <string>
template <typename T>
class CXMUVector {
private:
int capacity; // 容量
int size; // 元素个数
T* pdata; // 数据存储位置的指针
public:
// 构造函数
CXMUVector(int c = 100) : capacity(c), size(0) {
pdata = new T[capacity];
}
// 拷贝构造函数
CXMUVector(const CXMUVector& other) : capacity(other.capacity), size(other.size) {
pdata = new T[capacity];
for (int i = 0; i < size; i++) {
pdata[i] = other.pdata[i];
}
}
// 析构函数
~CXMUVector() {
delete[] pdata;
}
// 重载运算符[]
T& operator[](int index) {
return pdata[index];
}
// 重载运算符=
CXMUVector& operator=(const CXMUVector& other) {
if (this != &other) {
delete[] pdata;
capacity = other.capacity;
size = other.size;
pdata = new T[capacity];
for (int i = 0; i < size; i++) {
pdata[i] = other.pdata[i];
}
}
return *this;
}
// PushBack函数
void PushBack(const T& element) {
if (size == capacity) {
capacity *= 2; // 翻倍增长
T* newdata = new T[capacity];
for (int i = 0; i < size; i++) {
newdata[i] = pdata[i];
}
delete[] pdata;
pdata = newdata;
}
pdata[size++] = element;
}
// PopBack函数
T PopBack() {
if (size == 0) {
throw std::string("Pop On Empty Vector!");
}
return pdata[--size];
}
};
int main() {
try {
CXMUVector<int> vec(5);
for (int i = 0; i < 10; i++) {
vec.PushBack(i);
}
for (int i = 0; i < vec.size; i++) {
std::cout << vec[i] << " ";
}
std::cout << std::endl;
while (vec.size > 0) {
std::cout << vec.PopBack() << " ";
}
std::cout << std::endl;
// 测试异常信息
CXMUVector<int> empty_vec;
empty_vec.PopBack();
} catch (const std::string& ex) {
std::cout << "Exception: " << ex << std::endl;
}
return 0;
}
```
这是一个简单的实现,你可以根据自己的需要进行扩展和优化。