stl的作用案例(自动扩容的vector数组):
//不使用stl动态更新数组 int a[n]; int *p=new int[n]; int *temp=new int[m]; memecpy(temp,p,sizeof(int)*n); delete []p; p=temp;
//vector使用可自动变长 vector <int> a; for(int i=0;i<10;i++) a.push_back(i); a.resize(100); //调整数组a大小 a[90]=100; a.clear(); //删除所有元素,长度归零 a.resize(20,-1)//长度20,存-1
常用stl函数 | 作用 | 参数 | 返回值 |
---|---|---|---|
vector |
定义数组 | v-数组名 | - |
v.resize(length) | 调整数组大小 | length-数组调整大小 | - |
v.resize(length,value) | 指定数组长度和内容 | length-数组调整大小 value-数组保存值 | - |
v.clear() | 删除所有元素 | - | - |
v.push_back(value) | 尾部增加一个元素X | value-数组保存值 | - |
v.pop_back() | 尾部删除一个元素 | - | - |
v.front() | 返回首元素 | - | 首元素值 |
v.empty() | 判断是否为空 | - | bool |
v.size() | 返回元素长度 | - | int |
v.capacity() | 返回容器容量 | - | int |
v.max_size() | 返回stl容器允许最大元素数 | - | int |
v1.swap(v2) | 同类容器元素互换 | v2-与v1容器同类型的容器 | - |
tips:
1.vector扩容是值拷贝形式,地址空间会发生改变。
2.capacity和size的区别,capcity是容器预留空间(包括size),size是元素活动的空间,capacity通常会随着手动扩容而自动扩大,也可以自己控制容量。max_size属性和capacity不同,表示STL容器允许的最大元素数,通常,这个数是一个很大的常整数,可以理解为无穷大。这个数目与平台和实现相关。
迭代器用法:
迭代器函数 | 作用 | 参数 |
---|---|---|
vector |
定义迭代器 | - |
it=v.begin() | 迭代器指向首元素 | - |
it=v.end() | 迭代器指向尾元素 | - |
*it | 访问迭代器指向内容 | - |
v.erase(it) | 删除迭代器指向元素 | it-迭代器 |
v.erase(it1,it2) | 删除v中[it1,it2)指向区间内元素 | it1,it2两个迭代器 |
v.insert(it,x) | 向当前迭代器指向前插元素x | it-迭代器 x-元素值 |
v.insert(it,n,x) | 向当前迭代器指向前插n个元素x | it-迭代器 n-数量 x-元素值 |
v.insert(it,it1,it2) | 向当前迭代器it前插一段区间值 | it-当前迭代器 it1,it2-要插入的区间选择迭代器 |
例子:
int main() { vector <int> v; for (int i=0;i<10;i++){ v.push_back(i); } vector <int>::iterator it; it=v.begin(); v.erase(it); for(it=v.begin();it!=v.end();it++){ cout<<*it <<" "; } return 0; } 输出: 1 2 3 4 5 6 7 8 9
参考博客:
https://blog.csdn.net/u010183728/article/details/81913729