C++常用STL容器--vector

vector基本概念

vector数据结构和数组非常相似,也称为单端数组
vector与普通数组相比,不同之处在于数组是静态空间,而vector可以动态扩展

动态扩展不是在原空间后续接新空间,而是找更大的内存空间,然后将原数据拷贝到新空间,释放原空间

在这里插入图片描述


vector构造函数

功能

  • 创建vector容器

函数原型

  • vector<T> v; //默认构造函数
  • vector(v.begin(), v.end()); //将v[begin(),end()]区间中的元素拷贝给本身
  • vector(n,elem) //构造函数将n个elem拷贝给本身
  • vector(vec) //拷贝构造函数

示例

//1、默认构造
vector<int>v1;
for (int i = 0; i < 10; i++) {
	v1.push_back(i);
}

//2、通过区间方式进行构造
vector<int>v2(v1.begin(), v1.end());

//3、n个elem构造
vector<int>v3(10, 100);		//10个100

//4、拷贝构造,常用
vector<int>v4(v3);

vector赋值

函数原型

  • = //将另一个容器中的数据拷贝到该容器中
  • .assign(beg,end) //将【beg,end)区间中的数据拷贝赋值给本身
  • .assign(n,elem) //将n个elem元素拷贝赋值给本身

示例

vector<int>v1;
for(int i=0; i<10; i++){
    v1.push_back(i);
}

//1、operator=赋值
vector<int>v2=v1;

//2、assign赋值
vector<int>v3;
v3.assign(v1.begin(), v1.end());

//3、n个elem赋值
vector<int>v4;
v4.assign(10,100);

vector容量和大小

功能

  • 对vector容器的容量和大小操作

函数原型

  • .empty(); //判断容器是否为空
  • .capacity(); //容器的容量
  • .size(); //返回容器中元素的个数
  • .resize(num); //重新指定容器的长度为num,若容器变长,则以默认值填充新位置;若容器变短,则末尾超出容器长度的元素被删除
  • .resize(num,elem); //重新指定容器的长度为num,若容器变长,则以elem值填充新位置;若容器变短,则末尾超出容器长度的元素被删除

示例

vector<int>v1;
for(int i=0; i<10; i++){
    v1.push_back(i);
}

//判断容器是否为空
if(v1.empty()){
    cout << "v1为空" << endl;
}
else{
    cout << "v1不为空" << endl;
}

//判断容器容量,数值由计算机分配
cout << "v1的容量为:" << v1.capacity() << endl;

//判断容器大小,结果为10
cout << "v1的大小为" << v1.size() << endl;

//重新指定容器大小
v1.resize(15);

vector插入和删除

功能

  • 对vector容器进行插入、删除操作

函数原型

插入:

  • .push_back(ele); //尾部插入元素ele
  • .insert(pos, ele); //迭代器指向位置pos插入元素ele
  • .insert(pos, n, ele); //迭代器指向位置pos插入n个元素ele

删除:

  • .pop_back(); //删除最后一个元素
  • .erase(pos); //删除迭代器指向的元素
  • .erase(start, end); //删除迭代器从start到end之间的元素
  • .clear(); //删除容器中所有元素

示例

vector<int>v1;
//尾部插入元素10
v1.push_back(10);

//在指定位置插入元素100
v1.insert(v1.begin(),100);

//在指定位置插入2个元素1000
v1.insert(v1.begin(),2,1000);

//删除最后一个元素
v1.pop_back();

//删除迭代器指向位置的元素
v1.erase(v1.begin());

//清空
v1.erase(v1.begin(),v1.end());	//类似于v1.clear();

vector数据获取

功能

  • 对vector中的数据进行获取操作

函数原型

  • [pos]; //返回指定位置pos的数据
  • .at(pos); //返回指定位置pos的数据
  • .front(); //返回容器中第一个数据元素
  • .back(); //返回容器中最后一个数据元素

示例

vector<int>v1;
v1.assign(10,100);	//v1赋值为10个100

//1、利用[]方式访问数组中元素
for(int i=0; i<v1.size; i++){
    cout << v1[i] << " ";
}
cout << endl;

//2、利用.at()方式访问数组中元素
for(int i=0; i<v1.size; i++){
    cout << v1.at(i) << " ";
}
cout << endl;

//返回容器中第一个元素
cout << "" << v1.front() << endl;
//返回容器中最后一个元素
cout << "" << v1.back() << endl;

vector互换容器

功能

  • 实现两个容器内元素进行互换

函数原型

  • .swap(vec);将vec与本身的元素互换

示例

vector<int>v1;
v1.assign(10,100);
vector<int>v2;
v2.assign(10,0);

//v1与v2数据交换
v1.swap(v2);

swap可以使两个容器互换,从而达到实用的收缩效果:

vector<int>(v).swap(v);

收缩后的容器容量(capacity)与大小(size)相等


vector预留空间

功能

  • 减少vector在动态扩展容量时的扩展次数,用于数据量较大的情况

函数原型

  • .reserve(len) //容器预留len个元素长度,预留位置不初始化,元素不可访问

示例

vector<int>v;
//给容器预留10000空间
v.reserve(10000)

reserve与resize的区别

  • resize()改变了容器的capacity和size
  • reserve():增加了容器的capacity,但是它的size没有改变
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值