写一个根据索引和指针都可以查询的算法
时间: 2024-09-28 17:13:10 浏览: 19
当需要设计一个既能通过索引也能通过指针进行访问的数据结构时,可以考虑使用动态数组或链表结合某种查找机制。这里提供一个简单的基于数组的例子:
**动态数组示例 (C++)**
```cpp
template <typename T>
class IndexedArray {
private:
int size;
T* elements; // 动态数组存储位置
public:
IndexedArray(int initialCapacity) : size(0), elements(new T[initialCapacity]) {}
void resize(int newSize) {
if (newSize > size) {
T* newElements = new T[newSize];
for (int i = 0; i < size; ++i)
newElements[i] = elements[i]; // 将旧元素复制到新数组
delete[] elements;
elements = newElements;
size = newSize;
} else if (newSize < size) { // 缩减数组
size = newSize;
elements = new T[size];
for (int i = newSize; i < size; ++i)
elements[i] = nullptr; // 简单处理剩余空间
}
}
T& operator[](int index) { return elements[index]; } // 使用索引直接访问
T* getPointer(int index) { return &elements[index]; } // 返回指向指定位置的指针
~IndexedArray() {
delete[] elements;
}
};
// 使用示例
IndexedArray<int> myArray(5);
myArray[0] = 10; // 使用索引
auto ptr = myArray.getPointer(1); // 使用指针
```
在这个例子中,`IndexedArray`是一个模板类,它允许用户根据索引或指针获取数据。通过`resize`函数,我们可以动态调整数组大小。`operator[]`用于按索引访问,而`getPointer`则是为了方便指针操作。