用cpp设计一个向量类
时间: 2024-10-09 07:10:41 浏览: 31
面向对象程序设计基础向量类的设计
在C++中设计一个简单的向量类(vector),我们可以考虑使用STL库提供的`std::vector`作为基础,但为了教学目的,这里我会手写一个基本版本。注意,这个例子仅用于展示原理,实际项目中应优先使用标准库。
```cpp
#include <iostream>
#include <stdexcept>
// 向量模板类,使用动态数组存储元素
template <typename T>
class MyVector {
public:
// 构造函数,初始容量为0
MyVector(size_t initial_capacity = 0) : data_(initial_capacity), capacity_(initial_capacity) {}
// 插入元素到末尾
void push_back(const T& value) {
if (data_.size() == capacity_) {
resize(capacity_ * 2); // 当满时扩大一倍容量
}
data_.push_back(value);
}
// 获取元素,下标从0开始
const T& get(size_t index) const {
if (index >= data_.size()) {
throw std::out_of_range("Index out of range");
}
return data_[index];
}
// 返回元素数量
size_t size() const {
return data_.size();
}
private:
// 存储数据的动态数组
T* data_;
// 当前存储空间大小
size_t capacity_;
// 扩大容量(内部实现)
void resize(size_t new_capacity) {
T* new_data = new T[new_capacity];
for (size_t i = 0; i < data_.size(); ++i) {
new_data[i] = data_[i];
}
delete[] data_; // 清理旧数据
data_ = new_data;
capacity_ = new_capacity;
}
};
int main() {
MyVector<int> vec;
vec.push_back(5);
vec.push_back(10);
try {
std::cout << "Element at index 2: " << vec.get(2) << std::endl; // 这会抛出异常,因为索引超出范围
} catch (const std::out_of_range& e) {
std::cerr << "Caught exception: " << e.what() << std::endl;
}
return 0;
}
阅读全文