【发布时间】:2012-06-16 22:55:33
【问题描述】:
假设我有一个向量 V,它有 10 个元素。
如果我使用v.erase(v.begin()) 擦除第一个元素(在索引 0 处),那么 STL 向量如何处理这个?
它是否会创建另一个新向量并将元素从旧向量复制到新向量并释放旧向量?或者它是否从索引 1 开始复制每个元素并将元素复制到 index-1 ?
如果我一次需要一个大小为 100,000 的向量,然后我不使用那么多空间,假设我只需要一个大小为 10 的向量,那么它会自动减小大小吗? (我不这么认为)
我在网上看了,只有 API 和教程如何使用 STL 库。 有什么好的参考资料可以让我了解 STL 库的实现或复杂性吗?
【问题讨论】:
-
Effective STL,作者 Scott Meyers,对 STL 来说非常好。正如faq book list 中所见,C++ Standard Library Tutorial and Reference 看起来也有帮助。
-
一般来说,it's not called STL。 C++ 标准库,您可能指的是,在 C++ 标准中进行了描述;您可以免费获得最新草稿here。
-
好吧,我想它不会用 v.erase(v.begin()) 释放内存。无论如何,您可以使用 v.capacity() 来测试库是否更改了分配内存的大小。
-
有很多 STL 实现,您可以在线浏览它们的许多源代码。可以使用 SGI、GNU 和许多其他的。