优化上述代码数据接口定义为template <class T> class Vector {…},并设计一个测试程序
时间: 2024-02-15 21:03:21 浏览: 97
好的,我可以为你优化上述代码,使其支持模板类的数据接口定义。以下是一个新的实现,供你参考:
```c++
#include <iostream>
template <class T>
class Vector {
public:
Vector() : m_size(0), m_capacity(0), m_data(nullptr) {}
~Vector() { delete[] m_data; }
void add(const T& value) {
if (m_size == m_capacity) {
reserve(m_capacity == 0 ? 1 : m_capacity * 2);
}
m_data[m_size++] = value;
}
void reserve(size_t newCapacity) {
if (newCapacity <= m_capacity) {
return;
}
T* newData = new T[newCapacity];
for (size_t i = 0; i < m_size; i++) {
newData[i] = std::move(m_data[i]);
}
delete[] m_data;
m_data = newData;
m_capacity = newCapacity;
}
size_t size() const { return m_size; }
T& operator[](size_t index) { return m_data[index]; }
const T& operator[](size_t index) const { return m_data[index]; }
private:
size_t m_size;
size_t m_capacity;
T* m_data;
};
int main() {
Vector<int> vec;
for (int i = 0; i < 10; i++) {
vec.add(i);
}
for (int i = 0; i < vec.size(); i++) {
std::cout << vec[i] << " ";
}
std::cout << std::endl;
Vector<std::string> strVec;
strVec.add("hello");
strVec.add("world");
for (int i = 0; i < strVec.size(); i++) {
std::cout << strVec[i] << " ";
}
std::cout << std::endl;
return 0;
}
```
这个新的Vector类模板支持模板类的数据接口定义,并且可以存储任意类型的元素。测试程序中,我们创建了一个存储int类型元素的Vector对象和一个存储std::string类型元素的Vector对象,分别添加了若干个元素,并输出了它们的值。
请注意,这个Vector类模板仅作为一个简单的示例,实际使用时需要根据具体需求进行修改和优化。
阅读全文