dl
dl_vector_free.h
浏览该文件的文档.
1
10
11#pragma once
12#include <vector>
13#include <stack>
14
15namespace dl
16{
17template<typename T>
19{
20public:
21 // 申请一个空闲元素(O(1))
22 size_t GetFree()
23 {
24 // 1. 优先用空闲列表
25 if (!_freeIndex.empty())
26 {
27 size_t idx = _freeIndex.top();
28 _freeIndex.pop();
29 return idx;
30 }
31
32 // 2. 无空闲 → 扩容(最多触发一次)
33 _data.emplace_back();
34 return _data.size() - 1;
35 }
36
37 // 释放元素(O(1))
38 void Release(size_t index)
39 {
40 if (index < _data.size())
41 {
42 _freeIndex.push(index);
43 }
44 }
45
46 // 访问元素
47 T& operator[](size_t index)
48 {
49 return _data[index];
50 }
51
52 // 获取全部数据
53 std::vector<T>& data()
54 {
55 return _data;
56 }
57
58private:
59 std::vector<T> _data; // 真实资源
60 std::stack<size_t> _freeIndex; // 空闲索引栈
61};
62
63
64}
void Release(size_t index)
std::vector< T > & data()
T & operator[](size_t index)