c++中关于vector容器的各种函数介绍

c++中关于vector容器的各种函数介绍

头文件:

#include < vector >

先构造一个遍历vector所有元素的函数:

void printvector(vector<int>& v) {
	 for (vector<int>::iterator it = v.begin(); it != v.end(); it++) {
	  cout << *it << " ";
	 }
	 cout << endl;
}

一、vector容器构造函数:

函数原型:

  1. vector< T > v ;
    采用横板实现类实现,默认构造函数

  2. vector(v.begin(), v.end());
    将v[begin(),end()]区间中的元素拷贝给本身

  3. vector(n,elem);
    构造函数将n个elem拷贝给本身

  4. vector(const vector &vec);
    拷贝构造函数

void test01() {
	 //vector容器构造
	 vector<int> v1;//默认构造,无参构造
	for (int i = 0; i < 10; i++) {
	  v1.push_back(i);
	 }
	 printvector(v1);
	
	 //第二种:通过区间方式进行构造:
	 vector<int>v2(v1.begin(), v1.end());
	 printvector(v2);
	
	//第三种:n个elem方式构造
	 vector<int>v3(10, 100);//相当于构造了10个100
	 printvector(v3);
	 
	 //第四种:拷贝构造
	 vector<int>v4(v3);
	 printvector(v4);
}

二、vector赋值操作

函数原型:

  1. vector& operator = (const vector &vec);
    重载等号操作符
  2. assign(beg, end);//将(beg,end)
    区间中的数据拷贝赋值给本身
  3. assign(n,elem);
    将n个elem拷贝赋值给本身
void test02() {
	//先构造
	vector<int>v1;
	for (int i = 0; i < 10; i++) {
		v1.push_back(i);
	}
	printvector(v1);

	//赋值: operator = 
	vector<int>v2;
	v2 = v1;
	printvector(v2);

	//assign
	vector<int>v3;
	v3.assign(v1.begin(), v1.end());//注意区间是前闭后开
	printvector(v3);
	
	//n个elem方式赋值
	vector<int>v4;
	v4.assign(10, 100);
	printvector(v4);
}

三、vector容器和大小:

函数原型:

  1. empty();
    判断容器是否为空;
  2. capacity();
    容器的容量;
  3. size();
    返回容器中元素的个数;
  4. resize(int num);
    重新指定容器的长度为num。若容器变长,则以默认值填充新位置;
    如果容器变短,则末尾超出容器长度的元素被删除
  5. resize(int num, elem);
    重新指定容器的长度为num,若容器变长,则以elem值填充新位置
    如果容器变短,则末尾超出容器长度的元素被删除
void test03() {
	vector<int>v1;
	for (int i = 0; i < 10; i++) {
		v1.push_back(i);
	}
	printvector(v1);
	
	//判断是否为空:
	if (v1.empty()) {//为真,表示容器为空
		cout << "v1为空" << endl;
	}
	else {
		cout << "v1不为空" << endl;
		cout << "v1的容量为:" << v1.capacity() << endl;	//注意返回的是容器大小
		cout << "v1的大小为:" << v1.size() << endl;		//注意返回的是所存内容的多少
	}

	//重新指定大小:
	v1.resize(15);//默认用0来填充比原来长的部分
	printvector(v1);
	v1.resize(20, 100);//可以用自定义的值来填充比原来长的部分
	printvector(v1);
	v1.resize(5);//长于现在的部分全部被delete
	printvector(v1);
}

四、vector的插入和删除:

函数原型:

  1. push_back(elem);
    在尾部插入元素elem
  2. pop_back();
    删除最后一个元素
  3. insert(const_iterator pos, elem);
    迭代器指向位置pos插入元素elem
  4. insert(const_iterator pos, int count, elem);
    迭代器指向位置pos插入count个元素elem
  5. erase(const_iterator pos);
    删除迭代器指向的元素
  6. erase(const_iterator start, const iterator end);
    删除迭代器从start到end之间的元素
  7. clear();
    删除容器中所有的元素
void test04() {
	vector<int>v1;
	//尾插;
	v1.push_back(10);
	v1.push_back(20);
	v1.push_back(30);
	v1.push_back(40);
	v1.push_back(50);

	//遍历:
	printvector(v1);

	//尾删:
	v1.pop_back();
	printvector(v1);

	//头部插入:
	v1.insert(v1.begin(), 100);
	v1.insert(v1.begin(), 3, 5);
	printvector(v1);

	//删除:
	v1.erase(v1.begin());
	printvector(v1);

	cout << "最后一步" << endl;
	//清空:
	v1.erase(v1.begin(), v1.end());
	printvector(v1);
}

五、vector容器中的数据存取:(主要是“取”)

函数原型:

  1. at(int idx);
    返回索引idx所指的数据
  2. operator[];
    返回索引idx所指的数据
  3. front();
    返回容器中第一个数据元素
  4. back();
    返回容器中最后一个数据元素
void test05() {
	vector<int>v1;
	for (int i = 0; i < 10; i++) {
		v1.push_back(i);
	}

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

	//利用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与本身的元素互换

//1.基本使用:
void test06() {
	//容器互换前:
	cout << "交换前" << endl;
	vector<int>v1;
	for (int i = 0; i < 10; i++) {
		v1.push_back(i);
	}
	cout << "v1: ";
	printvector(v1);

	vector<int>v2;
	for (int i = 10; i > 0; i--) {
		v2.push_back(i);
	}
	cout << "v2: ";
	printvector(v2);

	cout << "交换后" << endl;
	v1.swap(v2);
	cout << "v1: ";
	printvector(v1);
	cout << "v2: ";
	printvector(v2);

}
//2.实际用途:
//巧用swap可以收缩内存空间;
void test07() {
	vector<int>v;
	for (int i = 0; i < 100000; i++) {
		v.push_back(i);
	}
	cout << "v的容量为: " << v.capacity() << endl;
	cout << "v的大小为: " << v.size() << endl;

	v.resize(3);
	cout << "v的容量为: " << v.capacity() << endl;
	cout << "v的大小为: " << v.size() << endl;

	//巧用swap收缩内存:
	vector<int>(v).swap(v);		//vector<int>(v)//这是一个匿名对象
								//.swap(v)就是做了一次容器交换
	cout << "v的容量为: " << v.capacity() << endl;
	cout << "v的大小为: " << v.size() << endl;
}

七、vector容器-预留空间

函数原型:
reserve(int len);
容器预留len个元素长度,预留位置不初始化,元素不可访问

void test08() {
	vector<int>v;

	int num = 0;//统计开辟次数
	int* p = NULL;
	for (int i = 0; i < 1000; i++) {
		v.push_back(i);
		if (p != &v[0]) {
			p = &v[0];
			num++;
		}
	}
	cout << "reserve前:" << num << endl;
	//利用reserve预留空间:
	num = 0;
	vector<int> v1;
	v1.reserve(1000);
	int* p1 =NULL;
	for (int i = 0; i < 1000; i++) {
		v1.push_back(i);
		if (p1 != &v1[0]) {
			p1 = &v1[0];
			num++;
		}
	}
	cout << "reserve后:" << num << endl;
}
  • 9
    点赞
  • 59
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值