一、探究std::vetor动态扩容过程 我们通过下面这段代码来了解一下std::vector的动态扩容过程。 #include<iostream>#include<vector>intmain(){std::vector<int>vec;intcapacity=-1;std::cout<<"size: "<<vec.size()<<" capacity: "<<vec.capacity()<<std::endl;for(inti=0;i<500;i++){vec.push_b...
// 配置默认最小容量为8 #ifndef CTL_VEC_MINIMAL_SIZE #define CTL_VEC_MINIMAL_SIZE 8 #endif // 配置默认扩容因子为2倍 #ifndef CTL_VEC_GROW_FACTOR #define CTL_VEC_GROW_FACTOR 2 #endif // 声明vector结构体及操作函数(宏版) #define DECL_VEC(TYPE) \ typedef struct { \ TYPE *data; /* ...
vector作为STL的常用容器之一,其特性和数组类似,拥有一段连续的内存空间。vector申请的是一段连续的内存,当插入新的元素内存不够时,通常会再重新申请更大的一块内存,将原来的元素拷贝过去,释放旧空间。因为内存空间是连续的,所以在进行插入和删除操作时,会造成内存块的拷贝,时间复杂度为O(n)。 二、相关函数介绍 2...
vector 是一种动态数组,在内存中具有连续的存储空间,支持快速随机访问,由于具有连续的存储空间,所以在插入和删除操作方面,效率比较慢。 当 vector 的大小和容量相等(size==capacity)时,如果再向其添加元素,那么 vector 就需要扩容。vector 容器扩容的过程需要经历以下 3 步: 重新在堆上创建更大的动态数组,大小是原...
```c int main() { Vector myVector; initVector(&myVector, 2); // 初始容量为2 addElement(&myVector, 1); addElement(&myVector, 2); addElement(&myVector, 3); // 这将触发扩容 printVector(&myVector); // 输出: 1 2 3 freeVector(&myVector); // 释放内存 return 0; } ``` ##...
using namespace std; int main() { vector<int> s1 = {1,2,3,4,5}; for(auto e : s1) { cout << e << " "; } return 0; //运行结果我就不展示了,上面的begin的运行结果就是范围for的运行结果。 } 2.3.vector空间增长问题 当然作为容器,难免会有扩容操作,会有查询有效元素个数操作,string...
[原创] c 语言技..在c++ 中有一个很常用的容器std::vector。vector是一个泛型容器,通过std::vector<Type>可以实例出不同类型的vector。其他语言比如go,python,j
💬 vector: vector() : _start(nullptr) , _finish(nullptr) , _eos(nullptr) {} 1. 2. 3. 4. 0x02 析构函数的实现 析构函数也没什么说的,要做的就是释放空间,并将定义的指针置空。 💬 ~vector: /* 析构函数 */ ~vector() {
5.说一说vector扩容时发生了什么 答案: vector空间已满时会申请新的空间并将原容器中的内容拷贝到新空间中,并销毁原容器 存储空间的重新分配会导致迭代器失效 6.删除元素会导致迭代器发生什么变化 答案: 1) 对于关联容器(如map, set,multimap,multiset),删除当前的iterator,仅仅会使当前的iterator失效,只要在erase...