如果我使用reserve()为向量保留足够的元素,那么push_back()(或insert())会抛出任何异常吗?
是否有一个参考文献指定哪些stl函数会/不会抛出任何异常?
谢谢。
push_back
会抛出异常。std::vector
实现将保持push_back
或insert
调用之前vector
的状态,以便您可以继续使用该对象。vector
实际上无法实现强异常保证。它无法回滚到先前的状态,因为复制元素可能会抛出异常,而 vector
是通过值存储它们的。 vector
只提供基本保证(即向量将保留在有效状态,并且不会泄漏任何资源)。 - jalf我只能回答前面两个问题中的第一个。
方法 reserve(K)
在 vector
上分配足够的空间来容纳 K
个元素,而不进行昂贵的重新分配,但如果有足够的插入操作,则 vector
的大小可以增长。