在C 中,有没有一种方法来编写一系列智能指针,以自动在数组中使用其索引更新尖的值?尖头值的成员可以存储索引,类似于侵入性重新数。
我有兴趣编写具有可更新优先级的堆。如果堆中的值始终被更新以指向其内部存储内部的索引,而无需在堆算法中的特殊知识,则在更改值的优先级时,很容易遵循该链接回到堆中。知道更改项目的位置,可以快速恢复堆不变。
这是我对基本实现的尝试。我希望将Container
的参考参考全局阵列进行参数化,而不会使实例大于一个指针,这将是好的,可以提高安全性。如果它也是随机访问迭代器,它将更有用。
class Contained {
public:
uintptr_t index;
};
class Container {
public:
Contained *value;
Container& operator=(Container& other);
};
Container foobars[4];
Container& Container::operator=(Container& other) {
this->value = other.value;
this->value->index = ((uintptr_t)this - (uintptr_t)foobars) / sizeof(this->value);
return *this;
}