【发布时间】:2021-04-26 18:22:48
【问题描述】:
所以我一直在看这个网站的代码:https://www.geeksforgeeks.org/program-to-create-custom-vector-class-in-c/。但是我在理解这部分时遇到了问题:
template <typename DT>
DT GenericMyVector<DT>::pop_back()
{
return arr[length-- - 1];
}
我知道这会将int length 降低一,并且当您调用函数大小时,它会小一。但这是我的问题: - 1 做什么?由于数组的大小是固定的,这如何降低向量占用的内存量?最后一个元素究竟是如何被弹回的?
【问题讨论】:
-
请注意,代码在演示自写向量的外观方面做得不好。有那么一刻,我想我必须改变我对 geeksforgeeks 的看法,但是对于自定义向量实现忽略 rule of 3/5 是不行的。我期待更多的细节问题
-
@largest_prime_is_463035818 您是否知道这些自定义向量类中有更好的示例?
-
不幸的是没有。保持简单但同时又不会被严重破坏并不容易。我不介意他们只关注某些方面,但假装这是一个可用的向量是一个糟糕的笑话。这个笑话是在你身上的,初学者来到这个页面期待学习。看这里:godbolt.org/z/zda45fGfx。我在第 131 行删除了一个检查,以演示当我在第 173 行复制时会发生什么。然后我可以在一个不应该包含任何元素的向量中打印元素(第 181 行)。没有未定义行为的唯一原因是他们决定泄漏向量内存。好难过
-
我碰巧在
operator[]()停止滚动。这几乎是恶意的,不利于学习。我从未信任过该网站,但我从未见过如此糟糕的事情。