C++STL-vector

一.基本概念

1.front()就是容器里第一个元素,back()就是容器最后一个元素,begin()就是指向第一个元素,end()就是指向最后一个元素的后一个元素

C++STL-vector_第1张图片

2. vector对象创建

1.默认构造函数 vector v1;
2.初始化列表 vector v2_1 = { 9,8,7,6,5 };
vector v2_2({ 9,6,6,8,5 });
3.迭代器 vector v3(v2_1.begin(), v2_1.end());
4.全0初始化,初始化8个0 vector v4(8);
5. vector 变量名(a, b); 申请a个空间的元素,每个元素的值初始化为 b  vector v5(8, 6);//初始化8个6
 6. 拷贝构造函数 vector v6(v2_2);

3.vector赋值操作

vector v = { 9,8,5,2,1,1 };
1. = 赋值 vector v1 = v;
2. assign(迭代器) vector v2;
v2.assign(v1.begin(), v1.end());
 3. assign初始化列表  vector v3;
 v3.assign({ 1,2,3,4,5,6 });
4. assign初始化 a 个 b vector v4;
v4.assign(8, 6);//初始化8个6

4.vector数据插入

vector v;
1.push_back,在容器后面插入操作 v.push_back(10);
2.insert,在容器中间任意位置插入 v.insert(v.begin(), 888);//在最前面插入

5.vector数据删除

vector v = { 9,8,5,211 };
1、pop_back,尾删 v.pop_back();
2、erase,中间任意位置删  v.erase(v.begin());
3、clear,全部删除 v.clear();

6.vector扩容

vector v1 = { 9,8,7,6 }
1.size(),获取数据个数 v1.size()
2.capacity(),获取容量大小,如果capacity小于size时,会按1.5倍扩容 v1.capacity()
3.resize(),改变vector的size;如果扩容很大,然后缩小后,capacity不会变,还是原来很大的容量 v1.resize(18);//将元素个数变成18个,如果多余出的则全部变成0,少于则缩容
v1.resize(20, 6);//扩容成20个元素,如果多余出的则全部变成6
4.reserve(),改变vector的capacity v.reserve(100);//直接将capacity扩容到100

6.vector随机访问元素

区别:at函数会产生异常处理,[ ]不会产生异常处理 vector v = { 9,8,7,6,5 };
1.像数组访问一样“[ ]”访问元素 v[2]
2.用at函数访问 v.at(2)

7.vector内存交换

swap() vector v1 = { 1,2,3,4,5 };
vector v2 = { 9,8,7,6,5 };
1. 内存交换 v1.swap(v2);//v1和v2值交换
2.缩容,如果resize很大后,再resize小,但capacity还是很大,通过swap函数后,capacity变得很小了.

v1.resize(1000000);
v1.resize(5);

vector(v1).swap(v1);

3.内存清理,即使clear掉元素,但capacity还是很大,通过swap一个空数后,capacity就会被清理

v2.resize(1000000);
v2.clear();

vector({}).swap(v2);

8.vector高效删除

//这种方法是我们常用删除方法,但当我们元素很大时候,时间复杂度会很高,所有耗时也比较长
void remove1(vector& v, int index) {
    v.erase(v.begin() + index);
}

//这种高效删除,直接交换一下,然后删除,时间复杂度很小
void remove2(vector& v, int index) {
    swap(v[index], v.back());
    v.pop_back();
}

 

9.vector数据排序

vector v = { 9,8,7,1,2,3,4 };
1.sort(),从小到大排序 sort(v.begin(), v.end());
如果想逆序排,可以添加这样一个函数,当A>B时返回true,所以逆序排 bool cmp(int a, int b) {
    return a > b;
}
sort(v.begin(), v.end(), cmp);

你可能感兴趣的:(C++STL,c++,开发语言)