在c ++中向向量添加元素之前是否需要检查容量?

时间:2010-04-29 01:26:13

标签: c++ stl

我是c ++ STL载体的新手,很抱歉在advence中遇到愚蠢的问题。 :) 在我的程序中,我有一个需要存储未知数量元素的向量。 在向其添加新元素之前,是否必须检查向量是否已达到其max_size? 当程序试图将元素添加到完整向量时,c ++编译器会自动抛出异常吗?

非常感谢,Cassie

4 个答案:

答案 0 :(得分:6)

如果std::vector已达到其最大大小,则尝试插入另一个元素将导致基础分配器抛出std::bad_alloc异常。

但请注意,向量的最大大小通常非常非常大(例如,size_t可以表示的最大值除以元素类型的大小),因此不太可能如果不是不可能的话,你可以在用完可以存储矢量的连续内存之前达到最大尺寸。

答案 1 :(得分:4)

由于您没有包含任何示例代码,因此要明确这取决于您的添加方式。如果您使用push_back(),则是,矢量将自动展开。如果你喜欢v[count++]=value;之类的东西,那么你可能遇到问题,因为这不会检查索引是否在范围内。

答案 2 :(得分:1)

没有。插入元素只会使vector中元素的任何迭代器,引用或指针无效。您的插入将(几乎)始终成功。

我说“接近”是因为如果没有足够的内存来移动底层数组(因为它已达到max_size - 通常是数百万或数十亿),或者如果发生异常,则会发生异常新元素。在这些情况下,抛出了c ++异常。

答案 3 :(得分:0)

不,你不必担心。向量和其他STL容器会根据需要自动增长(与普通数组不同)。