vector容器大致模拟实现

C++中的`std::vector`是基于动态数组实现的。其底层实现原理涉及内存管理、元素复制、迭代器失效等概念。以下是`std::vector`实现原理的一个简化示例,以及一些关键操作的模拟代码。

### 内存管理

`std::vector`通常使用一块连续的内存空间来存储元素。当添加元素超过当前容量时,需要重新分配更大的内存空间,并将现有元素复制到新内存中。

### 扩容机制

当`vector`的元素数量达到其容量时,需要扩容。通常,新分配的内存大小是当前容量的两倍(这是常见的策略,但具体实现可能有所不同)。

### 元素复制与移动

当扩容或插入元素时,需要复制或移动现有元素到新内存位置。

### 迭代器失效

在扩容或插入/删除操作时,迭代器可能会失效。`std::vector`需要处理迭代器的失效问题,确保它们在操作后仍然有效。

### 模拟代码

以下是模拟`std::vector`底层实现原理的简化代码:

```cpp
#include <iostream>
#include <cstring> // for memcpy

template <typename T>
class SimpleVector {
private:
    T* data;       // 指向动态分配数组的指针
    size_t size;   // 当前元素数量
    size_t capacity; // 当前分配的内存大小

    void resize(size_t new_capacity) {
        T* new_data = new T[new_capacity];
        std::memcpy(new_data, data, size * sizeof(T)); // 复制元素
        delete[] data; // 释放旧内存
        data = new_data;
        capacity = new_capacity;
    }

public:
    SimpleVector() : data(nullptr), size(0), capacity(0) {}

    ~SimpleVector() {
        delete[] data;
    }

    void push_back(const T& value) {
        if (size >= capacity) {
            // 扩容逻辑,这里简化为容量翻倍
            if (capacity == 0) capacity = 1;
            else capacity *= 2;
            resize(capacity);
        }
        data[size++] = value;
    }

    void pop_back() {
        if (size > 0) {
            size--;
        }
    }

    size_t getSize() const {
        return size;
    }

    T& operator[](size_t index) {
        if (index >= size) throw std::out_of_range("Index out of range");
        return data[index];
    }

    // 其他成员函数...
};

int main() {
    SimpleVector<int> vec;
    vec.push_back(1);
    vec.push_back(2);
    vec.push_back(3);

    for (size_t i = 0; i < vec.getSize(); ++i) {
        std::cout << vec[i] << " ";
    }
    std::cout << std::endl;

    vec.pop_back();

    for (size_t i = 0; i < vec.getSize(); ++i) {
        std::cout << vec[i] << " ";
    }
    std::cout << std::endl;

    return 0;
}
```

**注意**:这个简化的模拟代码仅用于演示`std::vector`的某些底层实现原理,并没有实现`std::vector`的所有功能和优化。在实际应用中,应直接使用STL提供的`std::vector`,因为它经过了优化,提供了更高效、更安全的操作。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值