将指向向量的指针转换为引用的成本

Cost of converting a pointer to a vector into a reference

我正在尝试使用指向 vector 的指针来访问 vector 的元素。我发现您可以执行类似于以下操作的操作:

std::vector<char> vector= { 'a', 'b','c','d' };
std::vector<char>* vecPointer = &vector;
std::vector<char>& vecReference = *vecPointer;
char value = vecReference[2];

但是,我担心费用。这比直接取消引用指针更好吗?我觉得应该是,因为它正在成为一个参考,但我不确定。

让我们逐行分析。

std::vector<char> vector= { 'a', 'b', 'c', 'd' };

这似乎是您必须支付的成本,但为了完整起见,这是 O(n) 复制元素加上一次内存分配(这可能有点昂贵)。如果您总是有 4 个元素,请使用 std::array 来避免内存分配成本。

std::vector<char>* vecPointer = &vector;

这不需要任何费用,您只是为现有事物创建一个新名称。

std::vector<char>& vecReference = *vecPointer;

这个不花钱,和上面一样。

char value = vecReference[2];

这与您使用 (*vecPointer)[2]vector[2] 的费用完全相同。它应该从地址(存储在向量中)加上偏移量 (2) 编译为单个加载。

当然,我假设您启用了编译器优化。如果您完全关心性能,则必须这样做。