STL--vector(二)

目录

一、vector 数值插入

1、尾插:v.push_back(x)

2、在迭代器之前插入

二、vector 数据删除

1、删除最后元素

2、删除任意元素

3、清空所有元素

三、vector 扩容机制

调整vector:

四、vector 随机访问

五、vector 内存交换

应用1:缩容

应用2:内存清理

六、vector 空间预留

七、vector 高效删除

八、vector 数据排序


一、vector 数值插入

1、尾插:v.push_back(x)

2、在迭代器之前插入

        v.insert(迭代器,x);

        在迭代器之前插入x。

        可实现头插:v.insert(v.begin(),x);

二、vector 数据删除

1、删除最后元素

        v.pop_back();

2、删除任意元素

        v.erase(迭代器);

注:这个函数会返回一个迭代器类型,返回值指向被删元素的下一个元素。

3、清空所有元素

        v.clear();

三、vector 扩容机制

容量:v.capacity();

大小:v.size();

当size==capacity时,再进行插入操作,capacity会扩容至原先的1.5倍大小。

调整vector:

        v.resize(x);        默认空余为0。

        v.resize(x,6);        空余被设为6。

注:当size变小时,capacity不会随之改变。

四、vector 随机访问

        ①v[2]

        ②v.at(2);

注:用中括号形式不会进行下标检测,而at会进行下标检测,一旦越界将抛出异常。

五、vector 内存交换

v1.swap(v2);

可将v1和v2内存互换。

应用1:缩容

前面我们说起,当size变小时,capacity不会随之改变;所以我们可以巧用这个函数来实现vector缩容的操作。

如:v1.resize(1000);

        v1.resize(5);        在这时v1的capacity为1000;

我们可以进行:vector(v1).swap(v1);        此时v1的capacity变为6;

应用2:内存清理

因为当size变小时,capacity不会随之改变,所以当我们进行清空操作,也就是v.clear();时,capacity还是不会改变的。那我们也可以巧用这个函数来进行内存清理。

        v2.resize(1000);

        v2.clear();        在这时v1的capacity为1000;

        vector({}).swap(v2);        此时此时v1的capacity变为0;

六、vector 空间预留

        v.reserve(100);        预留了100个空间

注:v.reverse()是vector反转函数。

reserve()修改的capacity

resize修改的size

七、vector 高效删除

注:不在意vector元素顺序

//高效删除
void remove(vector& v, int index)
{
	int temp = v[index];
	v[index] = *v.end();
	*v.end() = temp;
	v.pop_back();
}

如:v1={1,2,3,4,5};

        remove(v,2);        此时v1内元素应该为{1,2,5,4};

八、vector 数据排序

利用#include中的sort()函数。

sort(v.begin(),v,end());

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