我是c ++ STL载体的新手,很抱歉在advence中遇到愚蠢的问题。 :) 在我的程序中,我有一个需要存储未知数量元素的向量。 在向其添加新元素之前,是否必须检查向量是否已达到其max_size? 当程序试图将元素添加到完整向量时,c ++编译器会自动抛出异常吗?
非常感谢,Cassie
答案 0 :(得分:6)
如果std::vector
已达到其最大大小,则尝试插入另一个元素将导致基础分配器抛出std::bad_alloc
异常。
但请注意,向量的最大大小通常非常非常大(例如,size_t
可以表示的最大值除以元素类型的大小),因此不太可能如果不是不可能的话,你可以在用完可以存储矢量的连续内存之前达到最大尺寸。
答案 1 :(得分:4)
由于您没有包含任何示例代码,因此要明确这取决于您的添加方式。如果您使用push_back()
,则是,矢量将自动展开。如果你喜欢v[count++]=value;
之类的东西,那么你可能遇到问题,因为这不会检查索引是否在范围内。
答案 2 :(得分:1)
没有。插入元素只会使vector
中元素的任何迭代器,引用或指针无效。您的插入将(几乎)始终成功。
我说“接近”是因为如果没有足够的内存来移动底层数组(因为它已达到max_size
- 通常是数百万或数十亿),或者如果发生异常,则会发生异常新元素。在这些情况下,抛出了c ++异常。
答案 3 :(得分:0)