c++ vector实现
时间: 2023-05-27 16:01:59 浏览: 81
C++中的vector是一种动态数组,可以在运行时动态地改变大小。
vector的常用方法包括:
1. push_back():将元素添加到vector的末尾。
2. pop_back():从vector的末尾删除元素。
3. size():返回vector中元素的数量。
4. empty():检查vector是否为空。
5. clear():删除vector中的所有元素。
6. insert():在指定位置插入元素。
7. erase():从指定位置删除元素。
vector的实现需要使用指针和动态内存分配。以下是一个简单的vector实现示例:
```c++
template <typename T>
class MyVector {
public:
MyVector() : size_(0), capacity_(0), data_(nullptr) {}
~MyVector() {
delete[] data_;
}
void push_back(T val) {
if (size_ == capacity_) {
increase_capacity();
}
data_[size_] = val;
size_++;
}
void pop_back() {
if (size_ > 0) {
size_--;
}
}
int size() const {
return size_;
}
bool empty() const {
return size_ == 0;
}
void clear() {
size_ = 0;
}
void insert(int pos, T val) {
if (size_ == capacity_) {
increase_capacity();
}
for (int i = size_; i > pos; i--) {
data_[i] = data_[i-1];
}
data_[pos] = val;
size_++;
}
void erase(int pos) {
for (int i = pos; i < size_-1; i++) {
data_[i] = data_[i+1];
}
size_--;
}
T& operator[](int pos) const {
return data_[pos];
}
private:
void increase_capacity() {
capacity_ = (capacity_ == 0) ? 1 : capacity_ * 2;
T* new_data = new T[capacity_];
for (int i = 0; i < size_; i++) {
new_data[i] = data_[i];
}
delete[] data_;
data_ = new_data;
}
int size_;
int capacity_;
T* data_;
};
```
此实现中,我们将vector的数据存在一个指针`data_`中,利用动态内存分配(使用new和delete)。vector的实现和标准库相比显然是简单的,例如上述实现没有实现迭代器。
相关推荐
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)