一.初识stl--vector
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
参考博客: