我试图找出一个矢量在已经“创建”一些之后如何添加更多的对象,我的意思是:
int *ptr;
ptr = new int;
使用它之后,你可以为该指针添加更多对象吗? (使它成为一个数组)
谢谢!
答案 0 :(得分:7)
大多数实现都是从一个小数组开始,每当它达到其容量时,就会分配一个大小为double的新数组,并将旧元素复制到新数组中。
答案 1 :(得分:4)
与大多数STL容器一样,它使用外部分配器来实际分配内存。这是向量的第二个模板参数。
它使用placement-new将对象创建到内存中。
为了在内存不足时添加更多对象,它必须分配更大的数量。如果基础类型是POD,它只能realloc
,但如果不是,则必须使用对象的operator=
移动它们。
答案 2 :(得分:3)
你不能把它变成一个数组,你只能把它指向一个数组。
所以当你这样做时:
int *ptr;
ptr = new int;
你已将指针ptr指向新创建的整数。您可以删除它并创建数组,并将ptr指向该数组:
delete ptr;
ptr = new int[5];
答案 3 :(得分:0)
Vector可以调整大小,因为它是一个类。它将数据隐藏在对象中,您无法直接看到其内部结构。您只需使用其公共界面即可。它可以为您提供一个新的较大阵列的复制数据,而无需您看到它。
你不能用int *来做这件事,因为你这里没有类,没有地方可以隐藏用户的实际实现。
答案 4 :(得分:0)
1. Build an array.
2. copy *ptr into it.
3. swap ptrs.
4. delete the temp.
你去了,你现在已经“调整了”你的ptr。
答案 5 :(得分:0)
矢量跟踪两位信息。
如果添加元素不会导致它超过其容量,那么就没有问题。它只是添加了新元素。
如果超出容量,则计算新容量(通常为当前容量的1.5到2倍)并将所有元素复制到新阵列。这就是将项添加到向量后迭代器失效的原因。它们可能指的是旧的(现已释放的)数组。