STL_vector_c++常见操作用法解析

vector是C++STL中的部分,中文意思为"向量",它是一个多功能的,能够适用于多种数据结构和算法的模板类和函数库。因为它能够像容器一样存放各种类型的对象,因此也被称为容器。也可以说,vector是一个能够存放任意类型的动态数组,能够增加和移除数据。它只能在尾端快速插入删除元素,所以也叫单端数组。

使用vector时需要加入头文件和命名空间:

#include <vector>
using namespace std;

一.vector 默认构造和带参构造

	//默认构造
	vector<int> v1;      //存储int类型的vector容器
	vector<float> vFloat;  //存储float类型的vector容器
	vector<stubent> vStu;  //存储自定义类类型的vector容器
	
	//带参构造
	vector<int> vInt2(10);  //构造时分配10个元素空间,值默认为0
	vector<int> vInt3(10, 666); //构造时分配10个元素,值为666
	vector<int> vInt4(vInt2);  //构造时vInt2拷贝给vInt4
	vector<int> vInt5(vInt2.begin(), vInt2.end()); //构造时将vInt2[degin end)区间元素拷贝给vInt5,注意:前开后闭
	vector<int> vInt6(vInt2.begin() + 3, vInt2.end()); //构造时将vInt2[degin+3 end)区间元素拷贝给vInt6,注意:前开后闭
	int test[] = { 1, 2, 3, 4, 5 };
	vector<int> vInt4(test, test + 5); //构造时将test[test test+5)区间元素拷贝给vInt4,注意:前开后闭
	

二.vector的赋值

	vector<int> vInt2(10, 6);
	vector<int> vInt3(5, 5);

	//注意:vInt2为空时这样访问会报错,注意访问越界
	vInt2[0] = 1; //将1赋值给vInt2下标为0的元素 

	//使用at,注意越界
	vInt2.at(2) = 7; //将7赋值给vInt2下标为2的元素

	//assign赋值
	vInt2.assign(2, 8); //改变vInt2中的第二个元素的值替换成8
	vInt2.assign(vInt3.begin(), vInt3.end()); //将vInt3[begin end)区间元素赋值给vInt2,注意:前开后闭
	vInt2.assign(test, test + 3); //将test[test test+3)区间元素赋值给vInt2,注意:前开后闭
	vInt2 = vInt3; //直接调用赋值

    //使用接口返回的引用
	vInt2.front() = 7; //将7赋值给vInt2最靠前的那个元素
	vInt2.back() = 7; //将7赋值给vInt2最靠后的那个元素
	
	//swap交换
	vInt2.swap(vInt3);   //交换vInt2和vInt3的元素和值
	

三.vector的大小

	vector<int> vInt1(10, 5);

	//resize调整大小
	vInt1.resize(2);       //重新调整大小,缩小时指定元素值无效
	vInt1.resize(15, 7);   //重新调整大小,扩大后多出元素值为7
	vInt1.resize(15);      //重新调整大小,扩大后多出元素值默认为0

	//size查看存储元素个数
	cout << "v2 的元素个数:" << vInt1.size() << endl;  //查看vInt1的元素个数

	//capacity查看容量
	cout << "v2 的容量:" << vInt1.capacity() << endl;  //查看vInt1的空间大小

	//empty判断是否为空
	if (vInt1.empty()) {
		cout << "vInt1 为空!" << endl;  //如果执行这一行就为空
	}

	/*
		注意:如果vInt1的首地址和vInt1调整大小后首地址不一样,原因是以前的
	10个空间不够用了,重新开辟一块空间把原来的值拷贝到新的空间中!
	*/
	

四.vector尾部的添加与删除元素

	vector<int> vInt2(10,5);
	
	//push_back尾部添加
	vInt2.push_back(999); //尾部添加元素,值为999

	//pop_back尾部删除
	vInt2.pop_back(); //尾部删除元素
	

五.vector的插入与删除

	vector<int> vInt2(10, 5);
	vector<int> vInt3(3, 8);

	//insert插入单个元素
	vInt2.insert(vInt2.begin()+1, 888); //插入位置需要用迭代器,插入的值为888,插入位置之后的元素都要向后进行移动
	
	//insert插入多个元素
	vInt2.insert(vInt2.begin(), 3, 777); // 在最靠前的位置插入3个元素,值为777,插入位置之后的元素都要向后进行移动
	vInt2.insert(vInt2.begin(), vInt3.begin(), vInt3.end()); // 在最靠前的位置插入vInt3[begin end)区间的元素个数,值为vInt3[begin end)区间的元素值,插入位置之后的元素都要向后进行移动
	vInt2.insert(vInt2.begin() + 3, vInt3.begin(), vInt3.end()); // 在最靠前的位置加上(下标为3)的位置上插入vInt3的[begin end)的元素个数,值为vInt3[begin end)区间的元素值,插入位置之后的元素都要向后进行移动

	//clear删除所有元素
	vInt2.clear(); //所有元素都删除了,(注意:空间不受影响)

	//erase删除单个元素
	vInt2.erase(vInt2.begin()); //删除最靠前的元素

	//erase删除多个元素
	vInt2.erase(vInt2.begin(), vInt2.begin() + 3);//删除vInt2[begin begin+3)区间元素(注意:前开后闭)
	

六.vector与迭代器

	vector<int> vInt2;

	vInt2.push_back(1);
	vInt2.push_back(2);
	vInt2.push_back(3);
	vInt2.push_back(4);
	vInt2.push_back(5);

	//下标输出
	for (unsigned int i = 0; i < vInt2.size(); i++) {
		cout << vInt2[i] << endl;
	}

	//普通迭代器输出
	for (vector<int>::iterator it = vInt2.begin(); it != vInt2.end(); it++) {
		cout << *it << "\t"; //输出1 2 3 4 5
	}
	
	//逆转迭代器输出
	for (vector<int>::reverse_iterator rit = vInt2.rbegin(); rit != vInt2.rend(); rit++) {
		cout << *rit << endl; //输出5 4 3 2 1
	}

	//常量迭代器输出
	for (vector<int>::const_iterator cit = vInt2.cbegin(); cit != vInt2.cend(); cit++) {
		cout << *cit << endl; //输出1 2 3 4 5 注意:常量迭代器不能修改值
	}

	//常量逆转迭代器输出
	for (vector<int>::const_reverse_iterator crit = vInt2.crbegin(); crit != vInt2.crend(); crit++) {
		cout << *crit << endl;//输出5 4 3 2 1 注意:常量迭代器不能修改值
	}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值