0,STL初识
STL(Standard Template Library)标准模板库,主要是为了提高数据结构和算法的复用性。
一,vector
0,可以理解为动态数组,简单用法:
(1)需要引入头文件< vector>;
(2)其底层实现较为复杂,可以用迭代器(可理解为指针)来执行遍历操作,下例中v.begin()指向的是首元素,v.end()指向的是最后一个元素的下一个位置(注意不可访问);
(3)第三种遍历方法是采用了算法库(需要引入头文件algorithm)里的for_each,这个函数有三个参数,分别是迭代器的头、尾、需要对每个元素执行的操作函数名字;
(4)自动维护空间大小与位置,如果容量不够了,会自动找到新的位置,并把现有的数据都转移过去
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
void printInt(int value) {
cout << value << endl;
}
void test001() {
vector<int> v;
v.push_back(10);
v.push_back(20);
v.push_back(30);
v.push_back(40);
//遍历方式一:
vector<int>::iterator itBegin = v.begin();
vector<int>::iterator itEnd = v.end();
cout << "第一种遍历方式:" << endl;
while (itBegin != itEnd) {
cout << *itBegin << endl;
itBegin++;
}
//遍历方式二:
cout << "第二种遍历方式:" << endl;
for (vector<int>::iterator it = v.begin(); it != itEnd; it++) {
cout << *it << endl;
}
//遍历方式三:
cout << "第三种遍历方式:" << endl;
for_each(v.begin(), v.end(), printInt);
}
int main() {
test001();
}
1,构造函数
构造函数较多,灵活使用即可
vector<T> v;
vector(v.beg, v.end);
vector(n, elm);
vector(const vector& v);
2,赋值
主要重载运算符=,和assign()函数
vector& operator=(const vector& v);
assign(v.beg, v.end); //v容器的某一片段,beg和end表示这段的开始和结尾
assign(n, elm); //n个元素elm赋值给本身
3,容量与大小
有一些常用操作,并且要注意这里有容量和实际的元素数量,这是两个不同的概念,一般容量是要大于元素数量。而且只能放大容量而不能收缩
empty(); //判断是否为空
capacity(); //当前容器的容量
size(); // 当前容器内元素数量
resize(int num); //重新指定容器的元素数量为num,若比现在大,新的空间会创建默认对象,若比现在小,其容量不变,只把元素数重置为num
resize(int num, elm); //重新指定容器的元素数量为num,空的填充elm
4,插入和删除
常用的操作
push_back(); //往最后一个位置插入元素
pop_back(); //删掉最后一个元素
insert(const_iterator pos, elm); //往迭代器位置插入元素
insert(const_iterator pos, int count, elm); //往迭代器位置插入count个元素elm
erase(const_iterator pos); //删掉迭代器位置的元素
erase(const_iterator start, const_iterator end); //删除从start到end这段区间的元素
clear(); //清空容器
5,数据存取
常用操作,重载了运算符[],也可以用at()函数,注意这些返回的都是具体的元素,而不是迭代器指针
operator