stl和例外

时间:2010-09-08 12:02:57

标签: c++ stl

如果我使用reserve()为向量保留足够的元素,push_back()(或insert())会抛出任何异常吗?

是否有某个引用指定哪个stl函数抛出/不抛出任何异常?

谢谢。

3 个答案:

答案 0 :(得分:5)

  

如果我使用reserve()为向量保留足够的元素,push_back()(或insert())会抛出任何异常吗?

它不需要执行重新分配,因此vector 本身不会抛出任何异常。但是,您插入的元素在复制到向量时可能会抛出异常,因此push_backinsert仍然会抛出异常。

  

是否有某个引用指定哪个stl函数抛出/不抛出任何异常?

是的,C ++标准包含该信息。

答案 1 :(得分:4)

当复制构造抛出时,我会说push_back抛出。

现在,std::vector的异常安全实施将保持vector的状态,就像调用push_backinsert之前一样,以便您可以继续使用该对象

此外,请查看David Abrahams的Lessons Learned from Specifying Exception-Safety for the C++ Standard Library

答案 2 :(得分:0)

我只能回答这两个问题中的第一个问题。

方法reserve(K)vector上分配足够的空间以容纳K元素,而无需进行昂贵的重新分配,但如果进行了足够的插入,则vector的大小可能会增加